C++多重继承解决方法

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.mzph.cn/pingmian/10.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang:GORM使用First查询日志中出现大量record not found

感觉是作者故意留下的坑吧&#xff0c;用了很多编程语言的orm实现&#xff0c;第一次发现这个问题&#xff0c;好在作者已经解决了 通过配置日志参数IgnoreRecordNotFoundErrortrue实现忽略数据不存在的日志 完整配置示例 newLogger : logger.New(log.New(os.Stdout, "…

vue页面跳转后,再次返回原页面,不清空查询条件

需求说明 通过查询条件查询到对应的结果&#xff08;页面A&#xff09;&#xff0c;点击某一条列表数据&#xff0c;跳转到对应的详情页面&#xff08;页面B&#xff09;&#xff0c;点击返回按钮&#xff0c;再次返回页面A&#xff0c;之前的页面A查询条件和页面需要保持原始…

python中socket详解使用教程(结尾有案列)

socket 是 Python 中用于网络通信的一个标准库。它提供了创建网络套接字并进行网络通信的接口。下面我会详细解释 Python 中 socket 的基本概念和使用方法。 简单列程&#xff0c;在文章后面&#xff0c;可以自行翻阅 基本概念 套接字&#xff08;Socket&#xff09;&#xf…

Vue源码解读学习

Vue源码 观察者模式 & 发布订阅 观察者模式&#xff1a;中心一对多 系统单点间的灵活和拓展&#xff08;广播的方式&#xff09; 发布订阅&#xff1a;将注册列表遍历发布给订阅者 initInject initState initProvide他们挂载顺序为什么这样设计&#xff1f; initstate…

大数据运维应用场景面试题汇总及参考答案(持续更新)

描述大数据环境下的数据备份和恢复策略。 在大数据环境下,数据备份和恢复策略是确保数据安全和业务连续性的关键措施。首先,备份策略需要根据数据的重要性、更新频率和业务需求来设计。对于关键数据,可能需要实施实时或近实时的备份,而对于不太重要的数据,则可以采用定期备…

解决npm run dev跑项目,发现node版本不匹配,怎么跑起来?【已解决】

首先问题点就是我们npm run dev 运行项目的时候发现出错&#xff0c;跑不起来&#xff0c;类型下面这种 这里的出错的原因在于我们的node版本跟项目的版本不匹配 解决办法 我这里的问题是我的版本是node14的&#xff0c;然后项目需要node20的&#xff0c;执行下面的就可以正…

html接入高德地图

1.申请key key申请地址&#xff1a;https://console.amap.com/dev/key/app 官方文档 https://lbs.amap.com/api/javascript-api-v2/summary 2.html接入示例 需要将YOUR_KEY替换成自己的key <!doctype html> <html> <head><meta charset"utf-…

python的抽象类和抽象方法

抽象类是一种不能直接被继承的类。举个例子&#xff0c;我们可以从类Creature衍生出类People&#xff0c;Cats&#xff0c;其中前者两条腿走路&#xff0c;后者四条腿走路&#xff0c;而单独的类Creature却没有一个几条腿走路的方法&#xff0c;因为这是不确定的。 &#xff0…

WebKit 入门介绍

WebKit的介绍 WebKit 是一个开源的浏览器引擎&#xff0c;主要用于处理和渲染网页内容。它包含了用于解析 HTML 和 CSS、构建及维护文档对象模型 (DOM)、渲染页面布局与图形、以及执行 JavaScript 脚本等一系列功能模块&#xff0c;旨在为用户提供快速、流畅且标准兼容…