C++多重继承解决方法

news/2024/10/20 13:46:25/

eg1:解决方法:添加作用域标识符,消除成员限定的二义性

#include <iostream>
#include<iostream>
#include<vector>
using namespace std;
class A {
public:
    void f() 
    {
        cout << "A::f()" << endl;
    }
};

class B {
public:
    void f()
    {
        cout << "B::f()" << endl;
    }
    void g();
};

class C : public A, public B 
{
public:
    void g();
    void h();
    void f() {
        A::f();
    }
};
int main()
{
    C C1;
    C1.f();
    return 0;
}
eg2:解决方法:C++中虚继承:使派生类只保留一份间接基类成员

class A //间接基类,第一层的类
{
protected:
    int m_a;
};

class B :virtual public A //直接基类B
{
protected:
    int m_b;
    //继承m_a;
};

class C :virtual public A //直接基类C
{
protected:
    int m_c;
};

class D :public C, public B
{
public:
    void set(int a)
    {
        //继承m_a;
          //error:  m_a=a;
        //不知道赋值给B 类的还是C类的m_a;
        m_a = a;
        //B::m_a = a;
        //C::m_a = a;
    }
};
int main()
{
    return 0;
}

 egg:解决方法:C++中虚继承:使派生类只保留一份间接基类成员

//多重继承 虚继承
#include <iostream>
#include <string>
using namespace std;

class A
{
public:
    int m_a;
};

class B :virtual public A
{
public:
    int m_b;
    //虚继承 m_a
};

class C :virtual public A
{
public:
    int m_c;
    //虚继承 m_a
};

class D :virtual public A
{
public:
    int m_d;
    //虚继承 m_a
};


class E :public C, public B
{
public:
    int m_e;
    //虚继承 m_a
    //继承 m_b
    //继承 m_c
    void seta(int a) { m_a = a; }//正确
    void setb(int b) { m_b = b; }//正确
    void setc(int c) { m_c = c; }//正确
    void sete(int e) { m_e = e; }//正确
};

int main()
{
    E e;
    return 0;
}

 


http://www.ppmy.cn/news/1428180.html

相关文章

Java程序员学习路线指南

Java程序员学习路线指南 Java是一种广泛使用的编程语言&#xff0c;拥有庞大的生态系统和丰富的应用场景。成为一名优秀的Java程序员需要不断学习和实践。本文将为你提供一条清晰的Java学习路线&#xff0c;帮助你从入门到精通&#xff0c;逐步成为Java领域的专家。 1. Java基…

计算机网络----第十三天

DNS协议和文件传输协议 DNS&#xff1a; 含义&#xff1a;用于域名和IP地址的互相解析 DNS域名&#xff1a; 背景&#xff1a;通过IP地址访问目标主机&#xff0c;不便于记忆 域名的树形层次化结构&#xff1a; ①根域 ②顶级域&#xff1a;主机所处的国家/区域&#xf…

Redis中的Lua脚本(一)

Lua脚本 概述 Redis从2.6版本开始引入对Lua脚本的支持&#xff0c;通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本&#xff0c;直接在服务器端原子地执行多个Redis命令。其中使用EVAL命令可以直接对输入的脚本进行求值: 127.0.0.1:6379> EVAL "return hello…

java-spring 06 图灵 doGetBean方法

01.getBean() -> doGetBean() -> createBean() -> doCreateBean() -> createBeanInstance() -> populateBean() -> initializeBean() 流程 Overridepublic Object getBean(String name) throws BeansException {return doGetBean(name, null, null, false);}…

【IoTDB 线上小课 02】开源增益的大厂研发岗面经

还有友友不知道我们的【IoTDB 视频小课】系列吗&#xff1f; 关于 IoTDB&#xff0c;关于物联网&#xff0c;关于时序数据库&#xff0c;关于开源...给我们 5 分钟&#xff0c;持续学习&#xff0c;干货满满~ 5分钟学会 大厂研发岗面试 之前的第一期小课&#xff0c;我们听了 I…

科目一笔记

扣分 目前只有 12 9 6 3 1分。 扣1分的 会车 不按照规定会车&#xff0c; 普倒掉&#xff08;普通路上不按规定掉头&#xff0c;倒车&#xff09; ​ 高速、城市快速路…以外的道路 普通路 ​ 校车…以外的道车 普通车 使用灯光 ​ 需要注意的是只有不按规定使用灯光&…

【AR开发示例】实现AR管线巡检

写在前面的话 这是一篇旧文档&#xff0c;代码仓库见 https://gitee.com/tanyunxiu/AR-pipe 本文档是基于超图移动端SDK的AR模块开发的示例&#xff0c;仅供参考&#xff0c;SDK在持续迭代中&#xff0c;相关描述可能有变化。 示例介绍 这是一个使用AR查看墙内管线的基础示…

stack queue Leetcode 栈和队列算法题

232.用栈实现队列 Queue 是 Collection 接口下的&#xff0c;她的一个实现类是ArrayDeque. 不推荐使用 Vector 实现的 Stack&#xff0c;因为为了保证线程安全使得 Stack 的效率很低&#xff0c;而且由于继承的 Vector 导致没有屏蔽一些栈不应该有的操作 stack 下使用入栈出…