C ++继承和继承类中的变量

时间:2015-09-13 15:39:25

标签: c++ inheritance

让我们说我有一个名为MasterClass的类,它有一些像ChildA,ChildB等具有公共继承权的孩子。

MasterClass还有一个名为MVar的var,它来自AnimalClass类型,显然有些孩子喜欢DogClass,CatClass等

MasterClass有AnimalClass,但ChildA有DogClass,ChildB有CatClass等。

我如何创建一个仅在master中定义的函数,但是使用继承的函数,我的意思是:

ChildA ca; ca.emitSound();

和emitSound只调用MVar.makeSound();

之类的东西

其中emitSound仅在AnimalClass上定义,其行为取决于子类型。

我的问题是,似乎emitSound总是调用AnimalClass emitSound而不是DogClass emitSound。

显然,如果我在ChildA,ChildB等中定义一个emitSound,它工作正常,但我只是想让代码更小。

当然,我的现实生活问题比这个愚蠢的例子更复杂,但我认为问题几乎是一样的,即。 emitSound可以是一个虚拟的,允许一些孩子覆盖其行为等。

问候!

CODE:

TypeError : undefined is not an object

问题在于它打印" nosound"相反" bufff"

1 个答案:

答案 0 :(得分:0)

#include <iostream>

class Animal
{
public:
    virtual void sound()
    {
        std::cout << "Animal sound" << std::endl;
    }
    virtual ~Animal(){}
};
class Dog : public Animal
{
    void sound() //override
    {
        std::cout << "Dog sound" << std::endl;
    }
};

class Master
{
private:
    Animal *animal;
public:
    Master(Animal *a)
    {
        animal = a;
    }
    void emitSound()
    {
        animal->sound();
    }
    ~Master()
    {
        delete animal;
    }
};
class A : public Master
{
public:
    A(Dog *d) : Master(d){}
};

int main()
{
    A a(new Dog());
    a.emitSound();

    return 0;
}
OUTPUT: Dog sound