【C++ 继承与派生/知识梳理】
- 为什么引入继承派生
- 代码重用扩充
- 软件的复用
- 层次分类
- 派生类的语法定义
- class 派生类名(1):继承方式(2) 基类名(3){
派生成员声明;}
*(1)一个派生类——>多个基类,多继承。 只有一个基类,单继承。
(2)继承方式:关键字3个:public, protected,private
public: 公有成员和保护成员访问属性在派生类中不变,同:基类的私有成员不能直接访问。
protected: 公有成员和保护成员访问属性在派生类变成保护成员。同:基类的私有成员不能直接访问。
private: 基类中的公有成员和保护成员都成了派生类的私有成员,同:基类的私有成员不能直接访问。(作用:中止基类继续派生,qustion:1.基类的公共成员还能不能被对象访问?2.私有成员和保护成员有什么区别?//私有成员不能被继承,也不能被外部函数访问,保护可以被继承,但是外部函数不能访问,派生类的对象可以直接访问保护函数,基类对象不能直接访问)
- 访问与标识
-
(1) 当派生类与基类有同名成员时: 若未明确指出,则通过派生类对象使用的是派生类中的同名成员(同名覆盖原则)若要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名及作用域分辨符限定
-
(2) 多个基类存在同名成员时,如果通过派生类对象访问存在二义性,也应使用基类名及作用域分辨符限定
-
-
- 派生类的构造函数
-
- 语法:
派生类名::派生类名(所有形参) : 基类名1(基类1形参), … 基类名n(基类n形参), 内嵌对象名1(内嵌对象1形参), … { 派生类新增成员的初始化; }
- 调用顺序
1.首先,调用基类构造函数。 多个基类之间,按照它们被继承时声明的顺序 2.其次,调用内嵌对象的构造函数。多个内嵌对象之间,按照它们在类中声明的顺序. 3 最后,调用派生类的构造函数。
- 语法:
-
- 解析函数
-
-
当派生类对象的生命期结束时: 编译器会自动调用派生类的析构函数和基类的析构函数 析构函数的调用顺序与构造函数相反
-
-
- 复制构造函数
-
- 类型兼容规则
-
- 类型兼容原则
-
-
一个公有派生类的对象在使用上可以被当作基类的对象,反之,不可以。
-
-
- 虚基表
-
-
① 主要用来解决多重继承时可能发生的对同一基类继承多次而产生的二义性问题 ② 为派生类提供唯一的基类成员,而不重复产生多次拷贝
-
-
定义
-
class Base1:virtual public Base0 { public: int var1; void fun1(); };
- 在第一级继承时就要将共同基类设计为虚基类
-
-
-