首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基类数组中使用重写函数

在基类数组中使用重写函数
EN

Stack Overflow用户
提问于 2016-04-01 00:53:00
回答 1查看 119关注 0票数 0

目前,我遇到了一个涉及继承和派生对象数组的概念问题。我创建了一个指针数组,并根据数组位置是偶数还是奇数,使用基类或派生类填充指针数组。但是,当我调用birdType函数时,数组中的所有对象都使用基类函数,尽管偶数数组对象应该使用重写的版本函数。我试图在基本函数上使用虚拟调用机制,但这似乎会使程序崩溃。

有关守则:

代码语言:javascript
运行
复制
 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();;
}

以及当前的输出:

代码语言:javascript
运行
复制
I am a bird
I am a bird
I am a bird
I am a bird
I am a bird
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-01 01:05:29

您需要将基类(鸟)中的birdType()函数变为虚拟函数。如果它不是虚拟的,您将无法获得您想要的继承。

代码语言:javascript
运行
复制
virtual void birdType(){cout<<"I am a bird.\n";}

应该能起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36346273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档