命名冲突

当两个或多个基类中有同名的成员时,如果直接访问该成员,就会产生命名冲突,编译器不知道使用哪个基类的成员。这个时候需要在成员名字前面加上类名和域解析符::,以显式地指明到底使用哪个类的成员,消除二义性。
#include <iostream>
using namespace std;
//基类
class BaseA{
public:BaseA(int a, int b);~BaseA();
public:void show();
protected:int m_a;int m_b;
};
BaseA::BaseA(int a, int b): m_a(a), m_b(b){cout<<"BaseA constructor"<<endl;
}
BaseA::~BaseA(){cout<<"BaseA destructor"<<endl;
}
void BaseA::show(){cout<<"m_a = "<<m_a<<endl;cout<<"m_b = "<<m_b<<endl;
}
//基类
class BaseB{
public:BaseB(int c, int d);~BaseB();void show();
protected:int m_c;int m_d;
};
BaseB::BaseB(int c, int d): m_c(c), m_d(d){cout<<"BaseB constructor"<<endl;
}
BaseB::~BaseB(){cout<<"BaseB destructor"<<endl;
}
void BaseB::show(){cout<<"m_c = "<<m_c<<endl;cout<<"m_d = "<<m_d<<endl;
}//派生类class Derived:public BaseA,public BaseB{public:Derived(int a ,int b,int c,int d,int e);~Derived();public:void display();private:int m_e;};Derived::Derived(int a, int b, int c, int d, int e):BaseA(a,b),BaseB(c,d),m_e(e){cout<<"Derived constructor"<<endl;
}Derived::~Derived(){cout<<"Derived destructor"<<endl;
}void Derived::display() {BaseA::show(); //调用BaseA类的 show()函数BaseB::show(); //调用BaseA类的 show()函数cout<<"m_e = "<<m_e<<endl;
}int main(){Derived obj(1, 2, 3, 4, 5);obj.display();return 0;
}
请读者注意第 64、65 行代码,我们显式的指明了要调用哪个基类的 show() 函数。

C++多继承(多重继承)详解(二)命名冲突相关推荐

  1. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

  2. PackageManagerService启动详解(二)之怎么通过packages.xml对已安装应用信息进行持久化管理?

    PKMS启动详解(二)之怎么通过packages.xml对已安装应用信息进行持久化管理? Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKM ...

  3. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  4. Android Loader 异步加载详解二:探寻Loader内部机制

    Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...

  5. OS--进程间通信详解(二)

    OS–进程间通信详解(二) 文章目录 OS--进程间通信详解(二) 一.进程间通信 1.互斥量 Futexes Pthreads中的互斥量 2.管程 3.消息传递 消息传递系统的设计要点 用消息传递解 ...

  6. Android openGl开发详解(二)

    https://zhuanlan.zhihu.com/p/35192609 Android openGl开发详解(二)--通过SurfaceView,TextureView,GlSurfaceView ...

  7. Android基础入门教程——8.3.5 Paint API之—— Xfermode与PorterDuff详解(二)

    Android基础入门教程--8.3.5 Paint API之-- Xfermode与PorterDuff详解(二) 标签(空格分隔): Android基础入门教程 本节引言: 上一节,我们学习了Xf ...

  8. Kolin-集合详解(二)

    集合相关: Kolin-集合详解(一) Kolin-集合详解(二) 概述 自从Java 8支持了lambda表达式以来,Lambda表达式是实现大量函数特性的基础,让Java开发越来越趋向于流程式开发 ...

  9. C++的三种继承方式详解

    文章目录 @[toc] C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 ...

  10. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

最新文章

  1. TensorFlow基础12-(keras.Sequential模型以及使用Sequential模型 实现手写数字识别)
  2. 小企业是否能用得上ITIL?
  3. c语言 switch语句大小,C语言switch语句(板式整齐)
  4. PHP性能调优---php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)
  5. SAP Fiori Elements save按钮的实现细节
  6. 读取一个product全部数据的工具
  7. C/S简易UI框架开发总结(2)
  8. 虚拟机linux中怎样打开qt,虚拟机中在Centos 4.7中安装qt-x11-opensource-4.4.3
  9. 【现代机器人学】名词概念的理解
  10. Go Hack 2017 报名开启:十月魔都约一场 Go 语言烧脑之战
  11. 计算机音乐狂浪乐谱,当代歌曲 - 听海(流行歌曲 简谱)
  12. 使用PHP+LibreOffice实现word转html的功能
  13. mysql proxy maxscale_MaxScale: 一个用于解决MySQL扩展性的新工具(译)
  14. 【axios】get和post请求用法
  15. 基于MATLAB的机器人学、机器视觉与控制
  16. Python之多张图片拼接
  17. BI数据分析师工作说明
  18. labview--VIPM(VI package manager)打开后闪退
  19. 高考查询系统 (完善中)
  20. ubuntu 超级优化,不仅仅是禁用几个服务哦

热门文章

  1. 【CMAC小脑】CMAC逼近sin(t)函数的训练和测试
  2. STM32的ISP升级详解
  3. Python字符串、时间戳、datetime时间相关转换
  4. 网络设备主备配置系列3:华为防火墙(路由模式)
  5. 在 2016 年学 JavaScript 是一种什么样的体验?
  6. OpenCV学习笔记——Mat类型数据存储
  7. 【c++】标准模板库STL入门简介与常见用法
  8. 15 sql base line 工作机制
  9. Java中getResourceAsStream的用法小结
  10. debian 7上安装svn