基类数组中重写函数的使用
Use of Overridden functions in a base class array
我目前遇到一个涉及继承和派生对象数组的概念问题。我创建了一个指针数组,并根据数组的位置是偶数还是奇数,用基类或派生类填充它。然而,当我调用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
您需要使基类(bird)中的birdType()
函数成为虚拟函数。如果它不是虚拟的,你就不会得到你想要的遗产。
virtual void birdType(){cout<<"I am a bird.n";}
应该做到这一点。
相关文章:
- 在 C++ 中用派生类型重写成员函数
- 重写虚拟函数和继承
- C++调用使用重写函数的父类函数
- 重写打印函数而不是覆盖基类
- 重写函数不打印基类数据
- 将一个小的 C 定义重写为"normal" C++函数
- 重写另一个方法 [C++] 使用的超类回调函数
- 具有派生参数的函数重写
- 在回调中使用函数时,C++未知重写说明符
- 用模板化函数重写虚拟函数
- 没有函数重写的多重继承.为什么模棱两可
- C++ 继承构造函数重写
- 关于C++中的虚拟函数重写
- C++函数重写不起作用
- 如何实现类变量的虚拟函数重写
- 将C++函数重写为C#(将指针传递到数组中的下一个元素)
- 引用可以用于实现函数重写吗
- 用函数重写嵌套的if-else语句
- C++继承函数重写
- 本机C++中的函数重写