1 向上类型转换
取一个对象的地址并将其作为基类的对象来使用
2 捆绑
函数体和函数调用相联系称为捆绑
遭捆绑:在程序运行之前
晚捆绑:在程序运行时
3 虚函数
为了引起晚捆绑,需要在基类使用vitual修饰函数
4 c++如何实现晚捆绑
VTABLE
编译器放置特定的虚函数地址
在每个虚函数类中,编译器秘密的放置一个指针。
指向这个vtable
5抽象基类和纯虚函数
基类只作为一个接口。
纯虚函数:基类至少加入一个纯虚函数
当继承一个抽象类时,必须实现所有的纯虚函数否则继承的类也会是一个纯虚函数
6RTT1 运行时类型辨认
7 对象切片
传值
8 重载和重定义
重新定义一个基类的重载函数会隐藏多有该函数的其他基类版本
1 不许改变重载函数的返回值
2 可以改变返回指针和引用
9 虚函数
Vptr和vtable
设置vptr是构造函数的工作。
预处理器没有访问和类的概念
10 构造函数的调用次序
1 确保兑现被正确的建立
2 派生类只访问自己的成员,不访问基类成员
3
11 虚函数的调用发生在程序运行时
这时编译器不知道这个对象属于这个成员函数属于的类别
虚机制在构造函数中不起作用
12 构造函数调用时只知道构造函数所属的类。完全不知道这个类属于其他的类别
13 构造函数被调用后才有vtable
14 析构函数可以为虚函数
自最晚派生的类开始,并像上的基类
15 纯虚析构函数
必须为纯虚析构函数提供一个函数体
16 析构函数的虚机制
17 创建基于对象的继承
单根继承
18 运算符重载
19 向下类型转换
dynamic_cast 显示转换
安全类型转换
20 返回正确的地址,错误的话返回0