C++ 中只能通过引用和指针实现多态
多态的正确用法
C++ 中正确的多态使用方法只有两种:
- 基类引用绑定子类对象
- 基类指针指向子类对象
1 | class Base |
1 | Test t; |
无法实现多态的错误用法
1 | Test t; |
不要用基类指针指向子类数组
1 | Base* p = new Test[10]; // 错误用法!!!! |
原因其实很简单,当 Base 和 Test 大小不一致的时候,p [1] 其实指向的并不是一个正确的对象起始地址,如果把 p [1] 起始地址当作虚表读取,就会导致内存错乱
虚表指针放在对象起始位置是 C++ 实现多态的核心所在
就像下面的代码,一看就明白
1 | int* p = new char[8]; |