C++;多级继承函数调用 考虑C++类之间的多级继承。考虑: struct A { void Dummy1() { } }; struct B : A { void Dummy1() { } }; struct C : B { void Dummy() { Dummy1(); } void Dummy1() { } }; struct D : C { void Dummy1() { } }; struct E : D { void Dummy1() { } };

C++;多级继承函数调用 考虑C++类之间的多级继承。考虑: struct A { void Dummy1() { } }; struct B : A { void Dummy1() { } }; struct C : B { void Dummy() { Dummy1(); } void Dummy1() { } }; struct D : C { void Dummy1() { } }; struct E : D { void Dummy1() { } };,c++,inheritance,C++,Inheritance,鉴于: E e; e.Dummy(); 我想知道哪个Dummy1会被调用。是在C类中定义的还是在E类中定义的 此外,我对多级继承中的函数调用感到非常困惑,比如虚拟函数等。有人能推荐一本书或一篇文章来帮助我理解这一点吗。我在谷歌上搜索了很多,但没有找到任何有用的东西 提前谢谢 我想知道将调用哪个Dummy1。是在C类中定义的还是在E类中定义的 给定您的代码,它将调用C中定义的代码 如果你想让它调用E中定义的函数,你必须使Dummy1avirtual函数。你想学习的原理叫做多态性 如果Dummy1

鉴于:

E e;
e.Dummy();
我想知道哪个Dummy1会被调用。是在C类中定义的还是在E类中定义的

此外,我对多级继承中的函数调用感到非常困惑,比如虚拟函数等。有人能推荐一本书或一篇文章来帮助我理解这一点吗。我在谷歌上搜索了很多,但没有找到任何有用的东西

提前谢谢

我想知道将调用哪个
Dummy1
。是在C类中定义的还是在E类中定义的

给定您的代码,它将调用
C
中定义的代码


如果你想让它调用
E
中定义的函数,你必须使
Dummy1
a
virtual
函数。

你想学习的原理叫做多态性

如果
Dummy1()
在所有类中定义为
virtual
,则将使用在对象的确切类中定义的版本,即在您的情况下
e::Dummy()

但是,在代码中,它不是虚拟的,这就是为什么要调用
C::Dummy()

请注意,如果在继承(和函数定义匹配)时未提供
virtual
,大多数编译器都会发出警告,说明您正在重写函数