У меня возникла проблема с концепцией, включающей наследование и массивы производных объектов. Я создал массив указателей и заполнил его либо базовым классом, либо производным классом в зависимости от того, является ли позиция массива четной или нечетной. Однако, когда я вызываю функцию birdType, все объекты в массиве используют функцию базового класса, даже если объекты массива с четным номером должны использовать переопределенную функцию версии. Я попытался использовать механизм виртуальных вызовов для базовой функции, но это, похоже, сбой программы.Использование переопределенных функций в массиве базового класса
Код в вопросе:
class bird{
public:
void birdType(){cout<<"I am a bird.\n";}
};
class sparrow:public bird
{
void birdType() { cout <<"I am a sparrow.\n";}
};
int main(){
bird *collection[5];
for (int i = 0; i < 5; ++i) {
if (i % 2 != 0)
{
collection[i] = new bird;
}
else if (i % 2 == 0)
{
collection[i] = new sparrow;
}
}
for(int j=0;j<5;++j)collection[j]->birdType();;
}
и выходной ток:
I am a bird
I am a bird
I am a bird
I am a bird
I am a bird
эй спасибо за быстрый ответ, я, должно быть, сделал что-то другое, когда переписал это, потому что виртуальный, похоже, работает сейчас. заранее моя программа сработала бы с виртуальной базой. – LOUDNOODLES
@ LOUDNOODLES Рад это слышать! Разумеется, принимая это как ответ? – mwm314