C++之多重继承

当子类继承于多个父类时,有以下两种情况存在,称之为多重继承



                                         

// Multi_Inherit.cpp : Defines the entry point for the console application.
//多重继承


#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;

//父类中同名函数如何区分
class A {//父类A
private:
	int a;
public:
	A(int i):a(i){}
	void print()
	{
		cout << "父类A: " << a << endl;
	}
};
class B//父类B
{
private:
	int b;
public:
	B(int j):b(j){}
	void print()
	{
		cout << "父类B: " << b << endl;
	}
};
class C :public A, public B
{
private:
	int c;
public:
	C(int i,int j,int k):A(i),B(j),c(k){}
	void get_ab()
	{
		A::print();
		B::print();
	}
};
int main()
{
	C x(5, 8, 10);
	x.get_ab();

	//子类C中既有父类A中的print()函数,又有父类B的print()函数,所以调用时不知道
	//调用哪个父类的print()函数
	//x.print();  //error C2385: ambiguous access of 'print'
	system("pause");
    return 0;
}

通过明确指明作用域解析符号进行区分

x.A::print();//指明调用A的print()函数


对于上面右边的图中我们称之为菱形继承


//菱形继承
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
using namespace std;

class R//祖先类
{
private:
	int r;
public:
	R(int anInt):r(anInt){}
	void printOn()const
	{
		cout << "r = " << r << endl;
	}
};
//父类
class A :public R
{
private:
	int a;//父类A会有一份r
public:
	A(int i,int j):R(i),a(j){}
};
//父类
class B :public R
{
private:
	int b;//父类B会有一份r
public:
	B(int i, int j) :R(i), b(j) {}
};
//子类
class C :public A, public B
{
private:
	int c;//子类C会有两份r,一份来自A,一份来自B
public:
	C(int i,int j,int k):A(i,j),B(i,j),c(k){}
};

int main()
{
	R rr(10);
	A aa(20, 30);
	B bb(40, 50);
	C cc(5, 7, 9);

	rr.printOn();
	aa.printOn();
	bb.printOn();
	//cc.printOn(); ///error C2385: ambiguous access of 'printOn'

	system("pause");
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值