C++ 基类数组中重写函数的使用

C++ 基类数组中重写函数的使用,c++,arrays,inheritance,overriding,C++,Arrays,Inheritance,Overriding,我目前在一个涉及继承和派生对象数组的概念上遇到了问题。我创建了一个指针数组,并根据数组位置是偶数还是奇数,使用基类或派生类填充它。但是,当我调用birdType函数时,数组中的所有对象都使用基类函数,即使偶数数组对象应该使用重写版本函数。我尝试在基函数上使用虚拟调用机制,但这似乎会使程序崩溃 有关守则: class bird{ public: void birdType(){cout<<"I am a bird.\n";} }; class sparrow:public b

我目前在一个涉及继承和派生对象数组的概念上遇到了问题。我创建了一个指针数组,并根据数组位置是偶数还是奇数,使用基类或派生类填充它。但是,当我调用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();;
}

您需要使基类(bird)中的
birdType()
函数成为虚拟函数。如果它不是虚拟的,你就不会得到你想要的遗产

virtual void birdType(){cout<<"I am a bird.\n";}

virtual void birdType(){谢谢你的快速回复,我重写这篇文章时一定做了一些不同的事情,因为virtual现在似乎可以工作了。事先我的程序会在基函数上用virtual崩溃。@很高兴听到这个消息!那么,介意接受这个答案吗?
virtual void birdType(){cout<<"I am a bird.\n";}