Итак, предположим, у меня есть класс животных, управляемый классом zoo.
Animal is an abstract class to be derived by other real animal classes
class Animal{
public:
Animal();
virtual ~Animal() = 0;
//Various animal related functions
}
class Zoo{
public:
Zoo();
virtual ~Zoo();
virtual void updateAll();
//And various other functions dealing with animals
private:
vector<animal*> animals
}
Теперь скажите, что я хочу создать bird_zoo, и я хочу повторно использовать большую часть кода, используемого в классе Zoo и классе Animal.
Итак, я делаю птичий класс
class Bird : public Animal{
public:
Bird();
virtual ~Bird();
//all the various functions derived from Animal class
virtual void fly(); //New function that Animal didn't have
}
class Bird_Zoo : public Zoo{
public:
Bird_Zoo();
virtual ~Bird_Zoo();
//And various other functions dealing with animals, derived from Zoo
virtual void flyAll(); //New function that Zoo didn't have
private:
//vector<??????> birds
}
Как мне эта функция Bird_Zoo
справиться с имеющимися у нее птицами?Если я останусь с vector<Animal*>
из класса Zoo, как я могу позвонить fly()
?Мне действительно нужно каждый раз приводить его в Bird*
?Есть ли способ концептуально «перегрузить» vector<Animal*>
как vector<Bird*>
, чтобы все старые функции Zoo по-прежнему работали нормально?
Спасибо.