【发布时间】:2015-12-09 15:55:27
【问题描述】:
假设我有一个名为 MasterClass 的类,它有一些具有公共继承的子类,如 ChildA、ChildB 等。
MasterClass 也有一个名为 MVar 的变量,它来自 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 可以是一个虚拟的,允许一些孩子覆盖它的行为等。
问候!
代码:
AnimalClass
{
public:
AnimalClass();
virtual void makeSound(){ printf("nosound";}
}
DogClass: public AnimalClass
{
public:
DogClass();
void makeSound(){ printf("bufff";}
}
MasterClass
{
public:
MasterClass();
AnimalClass *ani;
void emitSound(){ani->makeSound();}
}
ChildAClass: public MasterClass
{
public:
ChildAClass(){ani=new DogClass();}
DogClass *ani;
}
main()
{
ChildAClass c;
c.emitSound();
}
问题在于它打印的是“nosound”而不是“bufff”
【问题讨论】:
-
在代码中编写这种关系可以让理解更简单
-
你是对的!完成。
-
你能写出一个带有 ideone.com 链接的工作示例吗?
-
我刚刚用一个例子编辑了这个问题
-
不,你没有。保证不编译的例子并不是真正的例子。
标签: c++ inheritance