美文网首页
C++之菱形继承

C++之菱形继承

作者: 二进制人类 | 来源:发表于2022-10-25 08:50 被阅读0次
class Animal
{
public:
    int data;
};

class horse:public Animal{};

class donkey:public Animal{};

class mule:public horse, public donkey{};

int main(int argc, char *argv[])
{
    mule ob1;
    //菱形继承容易产生数据和方法的二义性
    //cout<<ob1.data<<endl;//err

    //加作用域可以解决
    cout<<"data="<<ob1.horse::data<<endl;
    cout<<"data="<<ob1.donkey::data<<endl;
    return 0;
}

使用虚继承可以让mule只留一份公共祖先的数据

class Animal
{
public:
    int data;
};

//虚继承
class horse: virtual public Animal{};
//虚继承
class donkey:virtual public Animal{};
 //mule只有一份data
class mule: public horse, public donkey{};

int main(int argc, char *argv[])
{
    mule ob1;
    cout<<ob1.data<<endl;
    return 0;
}

虚继承原理

因此在发生虚继承后,马和驴中原先继承下来的age变成了vbptr指针都指向各自的虚函数表,通过各自虚函数表中指针的偏移量找到animal基类中age,避免了菱形继承的二义性

相关文章

  • C++之虚继承

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

  • C++之菱形继承

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

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

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

  • 钻石问题

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

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

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

  • 8-C++远征之继承篇-学习笔记

    C++远征之继承篇 开篇介绍 整个C++远征计划: 起航->离港->封装->继承 为什么要用继承? 为什么要有继承...

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

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

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

    C++远征之继承篇 开篇介绍 起航->离港->封装->继承 为什么要用继承? 为什么要有继承? 基类 <---->...

  • C++入门07 --多继承,菱形继承,虚继承,虚基类

    多继承 C++允许一个类有多个父类,不建议使用,会增加程序设计的复杂度; Undergraduate类继承自Stu...

  • UML 类图实践

    0 简介 0.1 记忆技巧 实线-继承 虚线-实现 实线-关联 虚线-依赖 空心菱形-聚合 实心菱形-组合 时序图...

网友评论

      本文标题:C++之菱形继承

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