目前,我遇到了一个涉及继承和派生对象数组的概念问题。我创建了一个指针数组,并根据数组位置是偶数还是奇数,使用基类或派生类填充指针数组。但是,当我调用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
发布于 2016-04-01 01:05:29
您需要将基类(鸟)中的birdType()
函数变为虚拟函数。如果它不是虚拟的,您将无法获得您想要的继承。
virtual void birdType(){cout<<"I am a bird.\n";}
应该能起作用。
https://stackoverflow.com/questions/36346273
复制相似问题