个人的读书笔记,记录一下~
C
类的继承
1概念:继承/派生
- 单继承/多重继承
2派生类的声明
class 派生类名:[继承方式] 基类名{ 派生类新添加的成员};
3派生类成员的访问属性
3.1public
积累的成员保持原有访问属性:public和protected不变,private(仍然是只有基类可访问、派生类不能访问)
3.2private
private(仍然是只有基类可访问、派生类不能访问),public和protected变为私有(即只在基类和派生类内可以访问,类外不可直接访问)
3.3protected
private(仍然是只有基类可访问、派生类不能访问),public和protected变为protected(即只在基类和派生类内可以访问,类外不可直接访问)
protected指只能类内访问,或被派生类访问,但不能被类外访问
4派生类的构造函数和析构函数
4.1一般情况
-
派生类构造函数名(总参数表):基类构造函数名(参数名){
派生类中新增数据成员和初始化语句}
-
派生类构造函数调用基类构造函数 ,故基类构造函数名中的参数名是实参
4.2有子对象的派生类的构造函数
-
派生类构造函数名(总参数表):基类构造函数名(参数名),子对象名(参数表){
派生类中新增数据成员和初始化语句}
-
执行派生类构造函数的顺序:1)调用基类构造函数;2)调用子对象构造函数;3)调用派生类构造函数;
4.3析构函数
调用顺序:1)派生类析构函数;2)子对象析构函数;3)基类的析构函数
5多重继承
5.1构造函数
派生类构造函数名(总参数表):基类1构造函数名(参数名),基类1构造函数名(参数表),...{派生类中新增数据成员和初始化语句}
- 避免同名导致的:二义性如果有同名成员,需要指明域:
类名::数据成员名
,不写明域就表示当前对象。
5.2虚基类
-
作用:在继承间接共同基类时只保留一份成员
-
声明某基类为虚基类:继承的时候,在派生类里声明:(在爸爸辈派生类)
class A{};
class B:virtual public A{};
-
在给孙子辈的派生类初始化时,不仅要对直接基类进行初始化,还要对虚基类初始化,编译的时候只执行续集类的构造函数,而忽略爸爸辈的派生类对虚基类的构造函数
6基类与派生类的转换
- 允许
派生类
对象向基类
对象赋值。同一基类不同派生类之间,基类对派生类,这些赋值是不被允许的。 - 允许
派生类
对象对基类
对象的引用赋值或初始化。此时,基类对象的引用只是派生类中基类部分
的别名,并与基类部分共享同一段存储单元、相同起始地址。 - 允许
派生类
对象做函数参数为基类
对象的实参。 - 允许
派生类
对象的地址赋给基类
对象的指针变量。