C++(五十四)之多继承的概念

本篇主要来讲解一下多继承的概念,

多继承模式:

class A既可以拥有B1的属性,又可以拥有B2的属性。

多继承也有缺陷,容易产生二义性。

这个时候需要使用作用域来解决二义性的问题,

下面上代码演示:

/****************************************************
 * brief  : 多继承的概念及缺点 
 * author : shao 
 * date   : 2020-04-07
 * note   : 多继承容易引发二义性,需要用作用域来解决 
 *
 ****************************************************/
#include <iostream>

using namespace std;

class Base1{
public:
	int m_A; 
	int m_D;
	Base1()
	{
		m_A = 10; 
		m_D = 15;
	}
};

class Base2{
public:
	int m_B;
	int m_D;
	Base2()
	{
		m_B = 20;
		m_D = 25; 
	}
};

class Son : public Base1, public Base2{
public:
	int m_C; 
	Son()
	{
		m_C = 30; 
	}
};

void test01(void)
{
	Son s;
	
	//调用父类Base1中的成员 
	cout << "s.m_A : " << s.m_A << endl;
	
	//调用父类Base2中的成员
	cout << "s.m_B : " << s.m_B << endl; 
	
	//调用自身成员
	cout << "s.m_C : " << s.m_C << endl;  
	
	/**
	 * 当调用m_D的时候,出现二义性。
	 * 编译器不知道需要调用哪个父类的成员,
	 * 这个时候需要使用作用域来解决二义性的问题。 
     */ 
     //cout << "s.m_D : " << s.m_D << endl; 
     cout << "s.Base1::m_D : " << s.Base1::m_D << endl;
     cout << "s.Base2::m_D : " << s.Base2::m_D << endl;
}

int main(void)
{
	test01();
	
	return 0;
} 

运行结果如下:

 

可以看到,在调用成员m_D的时候产生二义性,需要用类的作用域来区分,

我们需要调用的是Base1还是Base2类中的m_D成员。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值