• 菱形继承问题的解决方案--虚基类


    菱形继承解决方案 利用虚继承

    操作的时共享的一份数据

    sheepTuo内部结构

     vbptr 虚基类指针 v:virtual  b:base p:pointer 

     指向一张 虚基类表

     通过表找到偏移量

     找到共有的数据

     如图:类Sheep和Tuo保留的只是虚函数指针,只有Animal里才有数据

     实例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    class Animal
    {
    public:
    
        int m_Age;
    };
    //虚基类 Sheep
    class Sheep:virtual public Animal
    {
    };
    //虚基类 Tuo
    class Tuo: virtual public Animal
    {};
    class SheepTuo :public Sheep, public Tuo
    {
    };
    void test01()
    {
        SheepTuo st;
        st.Sheep::m_Age = 10;
        st.Tuo::m_Age = 20;
    
        cout << st.Sheep::m_Age << endl;    //20 因为指向的时同一个地址
        cout << st.Tuo::m_Age << endl;  //20
        cout << st.m_Age << endl;   //20 可以直接访问m_Age数据 原因时因为没有二义性了
    }
    int main()
    {
        test01();
        system("Pause");
        return 0;
    }

    结果:

  • 相关阅读:
    C++数组释放问题
    C# 线程与进程
    Inspector面板Debug模式
    Unity实现汉诺塔游戏
    Unity中的销毁方法
    如何修改Unity中脚本模板
    序列帧动画
    Unity中的射线和射线图层过滤使用方法
    简单第一人称射击游戏
    C# 集合和泛型
  • 原文地址:https://www.cnblogs.com/yifengs/p/15177059.html
Copyright © 2020-2023  润新知