考虑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() { }
};
假设:
E e;
e.Dummy();
我想知道会调用哪个Dummy1。类C
中定义的那个或类E
中定义的那个?
另外,我对多级继承中的函数调用感到非常困惑,比如虚函数等。有人可以建议一本书或文章可以帮助我理解这一点。我google了很多,但没有找到任何帮助。
提前致谢。
答案 0 :(得分:1)
我想知道将调用哪个
Dummy1
。类C
中定义的那个或类E
中定义的那个?
根据您的代码,它将调用C
中定义的代码。
如果您想要调用E
中定义的那个,则必须使Dummy1
成为virtual
函数。
答案 1 :(得分:1)
您想要学习的原则称为多态。
如果Dummy1()
在所有类中定义为virtual
,则将使用在对象的确切类中定义的版本,即在您的情况E::Dummy()
中。
但是在您的代码中,virtual
不是C::Dummy()
的原因,而是virtual
调用
请注意,如果在继承(和函数定义匹配)时未提供{{1}},大多数编译器都会发出警告,表示您正在覆盖函数