第三次课堂总结:
1.继承和派生类的概念
2.访问权限控制
3.派生类的构造函数和析构函数
4.多继承
继承的概念:
类的继承就是根据一个类创建一个新类的过程,以一个类创造新类,新类包含已有类的所有成员,而且新类可以根据需要添加新的成员。通常将用来派生新类的类称为基类,又称为父类,而将派生出来的新类称为派生类,又称为子类。
访问权限控制
就如同类与对象中有访问权限控制的设计一样,对于派生类也是具有访问权限控制的。公有继承、私有继承和保护继承,分别用关键字public、private和protected表示。
不同继承方式的影响主要体现在:
1、派生类成员对基类成员的访问控制。
2、派生类对象对基类成员的访问控制。
公有继承的访问权限:
基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可访问。派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。
私有继承的访问权限:
基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可访问。派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。
保护继承的访问权限:
基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可访问。派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。
总结而言不论哪种继承方式,派生类新定义成员均不能直接访问基类的私有成员,只能通过基类的公有成员函数或保护成员函数访问基类的私有数据成员,继承的分别主要体现在基类的成员以何种身份出现在派生类中。而基类的私有成员函数根本就不会继承,更谈不上使用。
派生类的构造函数和析构函数
派生类的构造函数
基类的构造函数不被继承,需要在派生类中自行声明。但是声明过程中只需要对新增成员的初始化,基类继承而来的成员的初始化在基类中完成,类似于儿子继承父亲已经思考而得出的结论。构造顺序类似与一般构造函数由上至下,首先调用基类的构造函数,再调用对象成员类(如果有对象成员)的构造函数,最后调用派生类的构造函数。
派生类的析构函数
类似于基类的构造函数不被继承,派生类中的构造函数也需要自行声明,调用顺序也类似于一般的析构函数由下到上:先调用派生类的析构函数,再调用对象成员类的析构函数(如果有对象成员),最后调用基类的析构函数。
多继承
多继承出现的环境类似于某人继承多个人的思想,因而无法用单继承的基类与派生类来进行描述,派生类可能以不同的继承形式继承了多个基类的成员,也就取得了不同的访问权限。其构造顺序为:调用顺序:先调用所有基类的构造函数,再调用派生类的构造函数。
虚基类
虚基类的设立主要是为了解决多继承中造成的二义性问题,因为可能出现基类与派生类之间,或基类之间出现同名成员,此时由于多继承,就很难分辨到底是从哪一个基类继承过来的成员。故将中间环节设置成虚基类,从不同的路径继承过来的该类成员在内存中只拥有一个副本,从而解决了同名成员的唯一标识问题。