C++
-
子类对象模型、
- 派生类包含多个组成部分(多个子对象)多个对象的内容不一定是要相联系、
- 含有子类自己定义的成员变量、成员函数的子对象、
- 子类继承基类的子对象、子对象包含基类定义的成员变量、成员函数、
- 子类 对象可以当成父类对象使用、因为派生类对象含有基类部分、
- 可以用基类指针new子类对象、编译器隐式从子类转换到基类、可以在使用基类引用的地方直接用子类对象的引用代替、
-
子类构造函数、
- 子类是使用父类的构造函数来初始化它的父类部分、父类控制父类部分的成员函数初始话、子类负责子类部分函数成员的初始化、二则不相干扰、互不影响、
- 结构继承默认为public(公有)继承、
- 构造函数时先执行基类的构造函数、再执行子类的构造函数、释放时相反、先释放子类的构造函数、再释放父类的构造函数、、
-
即当父类又是子类、
-
class a{ }; class b :public a { }://a是b的直接基类、 class c :public b { }://a是c的间接基类、
-
继承关系一直传递、构成继承链、最终结构会是c包含它的直接父类的成员以及每一个间接父类的成员、
-
直接基类、
-
间接基类、
-
b即使父类又是子类、
-
-
不当父类的类
- final关键字、放在类名后面、便使此类不能成为基类
-
静态类型与动态类型、
- 静态类型便是变量声明时候的类型、静态类型编译的时候使已知的、
- 动态类型指针或引用表达或代表的内存中的对象类型、运行时才知道、
- 动静类型只有基类指针或引用才存在动静类型不一致的情况、没有基类指针或引用则动静类型是一致的、也就是说没有动态类型和静态类型、
-
子类向基类的隐式类型转换、
- 编译器隐式执行子类转换成父类是因为每个派生类对象都包含父类部分、
- 基类对象可以独立对象的存在、也可以作为子类对象的一部分存在、
- 没有父类转子类的自动类型转换、
- 子类的引用不能绑定到基类上、同样、派生类的指针不能指向父类地址、
- 如果父类中有虚函数便可以通过dynamin_cast转换、子类转父类、
-
父类与派生类之间的拷贝与赋值、
- 派生类对象来定义并初始化基类对象、会导致基类拷贝函数执行、
- 无论是赋值还是拷贝均是只能处理基类自己的成员、无法处理派生类中的成员、即便是派生类的、
- 用派生类对象为一个基类对象初始化或赋值时、只有该派生类对象的基类部分会被拷贝和赋值、派生部分会被忽略掉、
- 父类动子类的东西、