【一天一篇CPP】多继承及其二义性(multiple inheritance,也叫多重继承,但不是多层继承)

原创 2013年10月11日 19:40:13

1. 前面讨论的是单继承,就是一个子类只有一个直接父类。但有时一个派生类可由两个或多个基类,派生类从两个或多个基类中继承所需的属性。【例如一个学生,既是班干,又是社团部长】

2. 形式:  

class D: public A, private B, protected C
{

};


3.多重继承派生类的构造函数

形式:

D(int a, int b, int c):A(a),B(b),C(c)
{
	D的初始化
}

4.多重继承可能存在二义性,例子:

class Teacher{
public:
	string name;
};

class Student{
public:
	string name;
};

class GraduateTeacher:public Teacher,public Student//毕业生当了老师
{
	如何使用上门的两个name才能区分它们,两个name可不会发生覆盖,前者使用Teacher::name,后者使用Student::name
	
}

在其它函数也一样使用,例如

class GraduateTeacher:public Teacher,public Student//毕业生当了老师
{
public:
	GraduateTeacher(){
		Teacher::name = "C雄";
		Student::name = "B雄";
	}
};

int main()
{
	GraduateTeacher gt;
	/*gt.Student::name = "haha";
	gt.Teacher::name = "hehe";这两行的写法也是对的*/
	cout << gt.Student::name <<endl;

	cout << gt.Teacher::name <<endl;
	return 0;
}

另外,看看这个例子,会发现派生类也可由有name这个数据成员!

class GraduateTeacher:public Teacher,public Student//毕业生当了老师
{
public:
	GraduateTeacher(){
		Teacher::name = "C雄";
		Student::name = "B雄";
		name = "A雄";
	}
	string name;
};

int main()
{
	GraduateTeacher gt;
	/*gt.Student::name = "haha";
	gt.Teacher::name = "hehe";*/

	cout << gt.name <<endl;

	cout << gt.Student::name <<endl;

	cout << gt.Teacher::name <<endl;
	return 0;
}
正确输出。【也就是说我们一般指的继承后的覆盖,也是保存成员的内存的,只是使用的时候指定方式不同】



相关文章推荐

基础备忘:多重继承中的二义性问题

二义性问题 在多重继承中,需要解决的主要问题是标识符不唯一,即二义性问题。例如,当在派生类继承的多个基类中有同名成员时,派生类中就会出现标识不唯一(二义性)的情况,这在程序中是不允许的。如: ...

JAVA多继承(multiple inheritance)的实现

Java设计者选择不支持多继承,其主要原因是多继承会让语言本身变得非常复杂,效率也会降低。为了实现多继承大多好处,java中的内部类和接口加在一起,可以实现多继承 内部类 内部类技术主要用于设计具...
  • issnow
  • issnow
  • 2014年12月10日 19:49
  • 402

C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance )

C++ 多继承和虚继承的内存布局原文链接:http://www.phpcompiler.org/articles/virtualinheritance.html 多重继承(Multiple Inher...

多重继承的二义性以及解决方法

//多重继承的二义性以及解决方法 //学习目的:了解类的继承原理及多重继承二义性的解决方法。 /* //本程序代码来源《MFC权威剖析》p68 */ ////////////////////...

C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance)

C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance)

从多重继承中的二义性 到 虚基类(摘抄自谭浩强c++)

一个多重继承的程序 #include using namespace std; class Teacher { public: Teacher(string nam,int a,string...
  • wsyxhwj
  • wsyxhwj
  • 2016年05月11日 16:15
  • 384

派生类构造函数和多重继承的二义性问题

一、派生类构造函数的写法(1)冒号前面是派生类构造函数的头部,这和我们以前介绍的构造函数的形式一样,但它的形参列表包括了初始化基类和派生类的成员变量所需的数据;冒号后面是对基类构造函数的调用,这和普通...

多重继承引发的二义性问题及解决方法分析

 首先了解: 1.类的继承:派生类拥有其基类拥有的所有数据成员与成员函数,但访问属性不同。 2.类的派生:派生类可以加入新的基类不拥有的数据与函数。   多重继承:一个类派生出多个类,多...

C++学习之继承篇(多继承与多重继承)

1.多继承 多继承是指一个子类继承多个父类。多继承对父类的个数没有限制,继承方式可以是公共继承、保护继承和私有继承, 不写继承方式,默认是private继承 多继承举例: #inclu...
  • hudfang
  • hudfang
  • 2016年01月21日 18:55
  • 11066

<C++略识>之多重继承、多继承、虚继承

问题:什么是多重继承? 定义三个类:人、士兵、步兵,则有:步兵士兵人,这样的关系称之为多重继承,写法如下:class Person { }; classSoldier:publicPerson ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【一天一篇CPP】多继承及其二义性(multiple inheritance,也叫多重继承,但不是多层继承)
举报原因:
原因补充:

(最多只允许输入30个字)