美文网首页
C++ 多重继承(菱形继承)

C++ 多重继承(菱形继承)

作者: MC_DEV_JIN | 来源:发表于2017-08-27 22:55 被阅读413次

C++支持多重继承。来看看下面一组继承关系:

class A

{

public:

virtual void f();

}

class B: public A

{

public:

virtual void f();

}

class C: public A

{

public:

virtual void f();

}

//类D多重继承自B,C

class D: public B, public C

{

public:

void g();

}

B,C继承于A,而D又继承于B,C。C++中称这种继承关系为菱形继承。如图1所示,此种继承方法一个不足之处为,在D的对象中,保存了2份A类中的数据成员。

图1 非虚基类继承对象结构布局

而如果用下面的继承方式,B,C通过virtual方式继承A,那么如图2所示,D中就只有一份关于A的数据成员了。

class A

{

public:

virtual void f();

}

class B: virtual public A

{

public:

virtual void f();

}

class C: virtual public A

{

public:

virtual void f();

}

class D: public B, public C

{

public:

void g();

}

图2虚基类继承对象结构布局

此外,菱形继承还会带来二义性。例如上面例子中,如果在D中定义函数D::g()时引用了f()函数:

void D::g()

{

f();

}

将无法知道f()是输入类B还是类C。为了避免二义性,需要显示的指出f()的出处。

void D::g()

{

B::f();//调用类B的f()方法

}

参考原文:http://www.mallocfree.com/interview/cpp-1-c.htm

相关文章

  • C++ 多重继承(菱形继承)

    C++支持多重继承。来看看下面一组继承关系: class A { public: virtual void f()...

  • C++之虚继承

    本文主要介绍C++中虚继承的相关内容 I、菱形继承 要了解C++的虚继承,首先要先了解菱形继承的概念及其带来的危害...

  • 慕课网-C++远征之继承篇(下)-学习笔记

    C++远征之继承篇(下) 多继承与多重继承 多重继承: 多继承: 如果不写,那么系统默认为private继承 多重...

  • Python学习周总结(18.03.19 - 03.23)

    1、多重继承 概念:如果一个类有多个父类,而多个父类又有公共的父类(菱形继承,钻石继承),即为多重继承 在搜索属性...

  • Effective c++学习笔记(item40)

    # 谨慎的使用多重继承 首先c++是支持多重继承的。如下面的代码`class student:public per...

  • 钻石问题

    在学习C++的时候,菱形继承问题绝对是一个不可避免的重点问题,那么什么是菱形继承问题呢?下图就是,长得像不像钻石?...

  • 关于虚继承的一些问题(转)

    关于C++中的虚拟继承的一些总结 C++类的大小 1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基...

  • C++之菱形继承

    使用虚继承可以让mule只留一份公共祖先的数据 虚继承原理 因此在发生虚继承后,马和驴中原先继承下来的age变成了...

  • Python之旅(第四周)

    多重继承 如果一个类有多个父类 ,而多个父类又有公共的父类(菱形继承/钻石继承),那么在搜索属性的和方法时搜索的依...

  • 电商专业学习嵌入式软件开发第五十九天

    C++第五天 今天继续讲多继承,主要讲了继承的构造顺序和菱形继承以及虚函数和动态多态,还讲了异质链表。今天讲的派生...

网友评论

      本文标题:C++ 多重继承(菱形继承)

      本文链接:https://www.haomeiwen.com/subject/zjoidxtx.html