#include <iostream>
using namespace std;
//-------------------------------
class A1{
public:
int a;
public:
void m();
}; void A1::m() {
cout<<"A1::m():a="<<this->a<<endl;
} //-------------------------------
class A2 {
public:
int a;
void m();
}; void A2::m() {
cout<<"A2::m(),a="<<this->a<<endl;
} //-------------------------------
class B :public A1, public A2{
public:
void show();
}; void B::show()
{
cout<<"A1::a="<<this->A1::a<<endl;
cout<<"A2::a="<<this->A2::a<<endl;
} //-------------------------------
void f1() {
B b;
b.A1::a = ;
b.A2::a = ; b.A1::m();//这时不能用b.m(),具有歧义;
b.A2::m();//用格式 b.A1::m(), b.A2::m()明确对象,消除歧义
b.show();
}
int main() {
f1();
while();
return ;
}
/*测试结果:

A1::m():a=34
A2::m(),a=32432
A1::a=34
A2::a=32432

*/

上面是两个基类有同样名称和形式的函数,都被继承到了子类中。访问他们的时候,要加上作用域才能正确地访问。

进一步来看,如果两个类都从同一个类派生,并没有重写某些函数,再有一个子类继承了它们两个。[共同基类产生的二义性]

情况就和上面类似了。代码如下:

#include <iostream>
using namespace std;
#include <string> class A
{
public:
int m_ax;
void show(); A();
A(int a); };
A::A()
{ }
A::A(int val)
{
this->m_ax = val;
} void A::show()
{
cout << "A::m_ax = "<<m_ax<<endl;
}
class B1: public A{ };
class B2: public A{ };
class C: public B1 ,public B2 {
public:
int m_cx;
void show();
};
void C::show()
{
//cout<<"c::show: m_ax = "<<m_ax<<endl;// error C2385: 对“m_ax”的访问不明确
cout<<"c::show: A::m_ax = "<<A::m_ax<<endl;
cout<<"c::show: B::m_ax = "<<B1::m_ax<<endl;
cout<<"c::show: B::m_ax = "<<B2::m_ax<<endl;
//从A、B1、B2派生下来的函数以及变量,在类C里面都得以保存,并各自占各自的独立的空间。
//eg:尽管m_ax最初源于A类,但是派生到C类里面的有三个不同的m_ax。对于方法,同理。
}
int main()
{
C c1 ;
c1.show(); //c1.m_ax = 11;//error C2385: 对“m_ax”的访问不明确
c1.B1::m_ax = ;
c1.B1::show(); while();
return ;
}

专门解决共同基类产生的二义性的办法还有虚基派生

见另一篇:

  c++, 虚基派生 : 共同基类产生的二义性的解决办法
  http://www.cnblogs.com/mylinux/p/4096926.html

c++,多继承造成的二义性及解决办法的更多相关文章

  1. 【转】C++中多重继承的二义性及解决办法

    转自:http://www.cnblogs.com/lintong/archive/2012/07/28/2613002.html 1. 什么是多重继承的二义性 class A{ public: vo ...

  2. c++, 虚基派生 : 共同基类产生的二义性的解决办法

    虚基派生 //虚继承 #include <iostream> using namespace std; #include <string> //---------------- ...

  3. 关于android:windowNoTitle不起作用的解决办法

    今天测试一个新功能的时候,在styles.xml设置<item name="android:windowNoTitle">true</item>并没有生效, ...

  4. 继承在WCF中的问题和解决办法

    1. 问题 假设有代码如下: [ServiceContract] public interface IA { [OperationContract] string M1(); } [ServiceCo ...

  5. maven dependcymanage作用在父类里面定义依赖包 子类不会自动继承需要主动使用 这样解决了父类引用任意包 子类就会引用的问题

    maven dependcymanage作用在父类里面定义依赖包 子类不会自动继承需要主动使用 这样解决了父类引用任意包 子类就会引用的问题  子类在引用时候 不需要加上版本号

  6. C#使用ListView更新数据出现闪烁解决办法

    C#使用ListView更新数据出现闪烁解决办法 在使用vs自动控件ListView控件时候,更新里面的部分代码时候出现闪烁的情况 如图: 解决以后: 解决办法使用双缓冲:添加新类继承ListView ...

  7. Andriod学习笔记2:“Your content must have a ListView whose id attribute is 'android.R.id.list'”问题的解决办法

    问题描述 activity_main.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <Lin ...

  8. Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

    概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...

  9. “maven编码gbk的不可映射字符”解决办法

    一.问题描述 Eclipse中使用Maven编译项目源代码时,如下的错误 java源代码在Eclipse中显示是没有任何错误的,可是执行"maven install"命令编译项目时 ...

随机推荐

  1. 数据可视化开源系统(python开发)

    Caravel 是 Airbnb (知名在线房屋短租公司)开源的数据探查与可视化平台(曾用名Panoramix),该工具在可视化.易用性和交互性上非常有特色,用户可以轻松对数据进行可视化分析. 核心功 ...

  2. 用Dart开发Android应用(sky应用)

    此文运用的是优雅的Markdown而书 流弊的Google公司,为了解决Android的卡顿问题,为此下了是不少的决心,这不最新研发的Sky移动应用UI框架,在用户界面和高质量的UI交互设计,很是让人 ...

  3. 远程连接MySQL 不允许

    报错:1130-host ... is not allowed to connect to this MySql server 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost ...

  4. PHP请求第三方接口的函数

    <?php public function HttpGet($url){ $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $url ...

  5. C语言(1)--准备

    经过很长一段时间的准备,终于重新弄懂了一些C语言的问题,再次熟悉了C语言的大致应用,对此略有体会,在此以博客记录于此! 准备工作: 运行平台:Linux 编辑工具:vim (还可以使用emac,ged ...

  6. 【双模卡的相关知识】解SIM卡前需要知道的信息(SIM年分和厂商识别)

    <ignore_js_op> 二.SIM版本问题SIM卡的版本有两种说法,一是有些是制造厂制定的,二是电信公司的制定.下面以移动为例,目前我们手里的SIM有几种版本:v0.v1.v2.v3 ...

  7. 解读ECMAScript 6箭头函数

    箭头函数是ECMAScript 6最受关注的更新内容之一.它引入了一种用「箭头」(=>)来定义函数的新语法,它…它碉堡了~.箭头函数与传统的JavaScript函数主要区别在于以下几点: 对 t ...

  8. echarts 应用数个样例

    应用一:环形图和饼图嵌套 先说明一下内部文件分布: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGV4dGJveQ==/font/5a6L5L2T/fo ...

  9. windows下使用python googleprotobuf

    首先下载:protobuf-2.5.0.tar.gz 和protoc-2.5.0-win32.zip.两者的版本要对应: 将下载的google protobuf解压,会看到一个python目录,Win ...

  10. json数据的获取(网络摘抄)

    一个简单的对象: $.ajax({ type: "post", url: "Handler.ashx", dataType: "html", ...