【问题标题】:C++ multilevel inheritance function callsC++ 多级继承函数调用
【发布时间】:2015-04-23 02:57:10
【问题描述】:

考虑 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 类中定义的?

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

提前致谢。

【问题讨论】:

    标签: c++ inheritance


    【解决方案1】:

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

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

    如果您希望它调用在E 中定义的那个,您必须将Dummy1 设为virtual 函数。

    【讨论】:

      【解决方案2】:

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

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

      但是在您的代码中不是virtual,这就是为什么您将调用C::Dummy()

      请注意,如果在继承(并且函数定义匹配)时未提供 virtual,大多数编译器会警告您正在覆盖函数

      【讨论】:

        猜你喜欢
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多