• C++多继承导致的菱形继承问题


    菱形继承问题来源:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    class A
    {
    public:
        int age;
    };
    class B : public A
    {
    
    };
    class C : public A
    {
    
    };
    class D : public B , public C
    {
    
    };
    int main()
    {
        D d;
        d.C::age=10;
        d.B::age=20;
        printf("%d %d
    ",d.B::age,d.C::age);
        return 0;
    }

    上面代码中D类对象的结构如下:

    D类相当于从A类继承来了两个age变量,但是有时候我们只需要一个age变量,这样可以可以采用虚继承来解决

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    class A
    {
    public:
        int age;
    };
    class B : virtual public A
    {
    
    };
    class C : virtual public A
    {
    
    };
    class D : public B , public C
    {
    
    };
    int main()
    {
        D d;
        d.C::age=10;
        d.B::age=20;
        printf("%d %d
    ",d.B::age,d.C::age);
        return 0;
    }

  • 相关阅读:
    KVM环境搭建RHCS
    修改virt-manager默认磁盘格式
    前端基础之html
    并发编程
    网络编程
    常用模块
    模块与包
    迭代器、生成器、面向过程编程
    闭包函数和装饰器
    函数
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/14724793.html
Copyright © 2020-2023  润新知