1.什么是继承
在C++类中包含了若干个数据成员和成员函数,在不同的类中数据成员和成员函数是不相同的,但有时俩个类的内容基本相同或有一部分相同。
例如:“公马”继承了“马”的全部特性,加上“雄性”的特性。“白公马”继承了“公马”的全部属性。所以继承是已存在类的基础上建立一个新的类。“马”为“基类”或“父类”,而新建立的类为“派生类”或“子类”
继承的定义格式:class student1(派生类即子类):acess-label(继承类型public,protected,private) BaseClassName(基类即父类)
2.派生类的继承方式
Public:公有继承 private:私有继承 protected:保护继承 如果不写继承方式则默认为prrivate
派生类成员的访问属性
(1)公有继承public:基类的public和protected在派生类中保持原有的访问属性,但私有成员为基类私有。
(2)私有继承private:基类的public和protected在派生类中成了私有成员。其私有成员依然为基类私有
(3)保护继承protected:基类的public和protected在派生类中成了保护成员,但私有成员仍未基类私有
保护成员:不能被外界引用,但可以被派生类成员引用。
**使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。
3.派生类的默认成员函数
派生类构造函数一般形式为:Student1(int n,string nam,char s,int a,string ad):Student (n,nam,s)
派生类构造函数名(总参数列表):基类构造函数名(参数列表){派生类中新增数据成员初始化语句}
继承关系中构造函数的调用过程:先执行基类构造函数,再调用派生类构造函数。 释放时先释放派生类构造函数,再释放基类构造函数
**1、基类没有缺省构造函数,派生类必须要在初始化列表中显式给出基类名和参数列表。
2、基类没有定义构造函数,则派生类也可以不用定义,全部使用缺省构造函数。
3、基类定义了带有形参表构造函数,派生类就一定定义构造函数。
派生类的析构函数:
先执行派生类自己的析构函数,对派生类新增加的成员进行清理。再执行子对象的构造函数,对子对象进行清理,最后调用基类的构造函数,对基类构造函数进行清理。
4.继承体系中的作用域
子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问
5.继承的转化
1.子类对象可赋值给父类,但父类对象不可赋值给子类
2.父类对象的指针可以指向子类对象,但子类对象的指针不可以指向父类
6.多重继承
一个派生类有俩个或俩个以上的基类称为多重继承。声明多重记载的方法:
class D:public A,private B,protected C{D新增加的成员}
但多重继承会因为继承成员同名产生二义性。为了解决这个问题引入虚继承:
class 派生类名:virtual 继承方式 基类名