C ++多级继承函数调用

时间:2015-04-23 02:57:11

标签: c++ inheritance

考虑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了很多,但没有找到任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

我想知道将调用哪个Dummy1。类C中定义的那个或类E中定义的那个?

根据您的代码,它将调用C中定义的代码。

如果您想要调用E中定义的那个,则必须使Dummy1成为virtual函数。

答案 1 :(得分:1)

您想要学习的原则称为多态

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

但是在您的代码中,virtual不是C::Dummy()的原因,而是virtual调用

请注意,如果在继承(和函数定义匹配)时未提供{{1}},大多数编译器都会发出警告,表示您正在覆盖函数