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
avirtual
函数。你想学习的原理叫做多态性
如果Dummy1()
在所有类中定义为virtual
,则将使用在对象的确切类中定义的版本,即在您的情况下e::Dummy()
但是,在代码中,它不是虚拟的,这就是为什么要调用C::Dummy()
请注意,如果在继承(和函数定义匹配)时未提供virtual
,大多数编译器都会发出警告,说明您正在重写函数