在子类中重写时,为什么函数不执行该操作?

时间:2018-07-27 12:38:30

标签: c++ inheritance override

我正在练习在C ++中使用多态。

下面是我的超类和子类实现。

class Animal{
public:

    int num ;
    string name ;

public:

    Animal()
    {

    };

    Animal( int i, string n)
    {
        num = i;
        name = n ;
    };

    void bark()
    {
        cout<<"---"<<endl;
    };

};

class Cat : public Animal
    {

    public:
        Cat(){  }
        Cat( int i, string n) :  Animal( i, n)
        {
            cout<<"construct "<<"Cat"<<"!!"<<  endl;
        };

        public:

        void bark()
        {
            cout<<"MMM"<<endl;
        }

    };

    class Dog : public Animal
    {
    public:

        Dog() {}
        Dog( int i, string n) :  Animal( i, n)
        {
            cout<<"construct "<<"Dog"<<"!!"<<  endl;
        };

        void bark()
        {
            cout<<"WWW"<<endl;
        }

    };

show(Animal a){
      cout< <a.num << endl << a.name << endl;
        a.bark();
    };

然后,我想如果我创建一只猫和一只狗并调用show(),那只猫将打印出MMM和狗WWW。 但是在我这样做之后,

int main()
{

    Cat c1(1,"Kitty") ;
    Dog d1(2,"Doggy");

    cout<<endl;
    show(c1);
    show(d1);

}

结果是,

construct Cat!!
construct Dog!!

1
Kitty
---
2
Doggy
---

这两个bark()函数没有执行我在子类中重写的操作,而是仍然执行超类定义的操作。

但是我发现,如果我以这种方式直接在main()c1.bark()中使用该函数,那么它将起作用。

这怎么了?

0 个答案:

没有答案