让我们说我有一个名为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"
答案 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