C++多继承(多重继承)详解(二)命名冲突
命名冲突
当两个或多个基类中有同名的成员时,如果直接访问该成员,就会产生命名冲突,编译器不知道使用哪个基类的成员。这个时候需要在成员名字前面加上类名和域解析符::,以显式地指明到底使用哪个类的成员,消除二义性。
#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++多继承(多重继承)详解(二)命名冲突相关推荐
- css样式继承规则详解
css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...
- PackageManagerService启动详解(二)之怎么通过packages.xml对已安装应用信息进行持久化管理?
PKMS启动详解(二)之怎么通过packages.xml对已安装应用信息进行持久化管理? Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKM ...
- php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念
js里常用的如下 - phpStudy...
JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...
- Android Loader 异步加载详解二:探寻Loader内部机制
Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...
- OS--进程间通信详解(二)
OS–进程间通信详解(二) 文章目录 OS--进程间通信详解(二) 一.进程间通信 1.互斥量 Futexes Pthreads中的互斥量 2.管程 3.消息传递 消息传递系统的设计要点 用消息传递解 ...
- Android openGl开发详解(二)
https://zhuanlan.zhihu.com/p/35192609 Android openGl开发详解(二)--通过SurfaceView,TextureView,GlSurfaceView ...
- Android基础入门教程——8.3.5 Paint API之—— Xfermode与PorterDuff详解(二)
Android基础入门教程--8.3.5 Paint API之-- Xfermode与PorterDuff详解(二) 标签(空格分隔): Android基础入门教程 本节引言: 上一节,我们学习了Xf ...
- Kolin-集合详解(二)
集合相关: Kolin-集合详解(一) Kolin-集合详解(二) 概述 自从Java 8支持了lambda表达式以来,Lambda表达式是实现大量函数特性的基础,让Java开发越来越趋向于流程式开发 ...
- C++的三种继承方式详解
文章目录 @[toc] C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 ...
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
最新文章
- TensorFlow基础12-(keras.Sequential模型以及使用Sequential模型 实现手写数字识别)
- 小企业是否能用得上ITIL?
- c语言 switch语句大小,C语言switch语句(板式整齐)
- PHP性能调优---php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)
- SAP Fiori Elements save按钮的实现细节
- 读取一个product全部数据的工具
- C/S简易UI框架开发总结(2)
- 虚拟机linux中怎样打开qt,虚拟机中在Centos 4.7中安装qt-x11-opensource-4.4.3
- 【现代机器人学】名词概念的理解
- Go Hack 2017 报名开启:十月魔都约一场 Go 语言烧脑之战
- 计算机音乐狂浪乐谱,当代歌曲 - 听海(流行歌曲 简谱)
- 使用PHP+LibreOffice实现word转html的功能
- mysql proxy maxscale_MaxScale: 一个用于解决MySQL扩展性的新工具(译)
- 【axios】get和post请求用法
- 基于MATLAB的机器人学、机器视觉与控制
- Python之多张图片拼接
- BI数据分析师工作说明
- labview--VIPM(VI package manager)打开后闪退
- 高考查询系统 (完善中)
- ubuntu 超级优化,不仅仅是禁用几个服务哦