Appearance
C++ 面向对象(OOP)与多态专题
一句话总览
OOP 三大特性:封装、继承、多态。C++ 面试 OOP 部分几乎都围绕 虚函数、多态实现、类内存布局、构造/析构 展开,且极喜欢面试官追问「为什么这么设计」。
问题清单(自测)
概念 / 特性
- 面向对象三大特性是什么?如何理解?
- C++ 与其它语言 OOP 差异、struct vs class?
- 重载(overload)/ 重写(override)/ 隐藏(hide)的区别?
- 构造函数 / 析构函数 / 拷贝构造 / 赋值 / 移动,默认生成的五个(六个)特殊成员是什么?
虚函数 / 多态(重点中的重点)
- 什么是多态?编译期多态(模板重载)与运行期多态(虚函数)区别?
- 虚函数表(vtable)与虚函数指针(vptr)的内存布局?
- 为什么析构函数要写成虚函数?为什么构造函数不能是虚函数?
- 纯虚函数、抽象类、接口类?
- 虚函数表是存在哪里?一个类几个 vptr?(多继承)
- 基类指针 delete 派生类对象安全吗?为什么?
- 静态绑定 vs 动态绑定?(虚函数调用为何查表)
类内存 / 对象模型
- 空类大小?为什么是 1?
- 有虚函数后的对象大小加了多少?vptr 放哪?
- 多继承的内存布局、菱形继承(virtual 继承)?
- struct 布局要点(内存对齐、位域)见 memory 篇。
子文档
| 文件 | 内容 |
|---|---|
polymorphism.md | 多态机制、动态绑定 |
vtable.md | 虚表/虚指针内存模型、对象大小 |
virtual-destructor.md | 虚析构/构造辨析、特殊成员函数三/五规则 |
concepts.md | 重载重写隐藏、struct/class/union、访问控制 |
inheritance-deep.md | 多继承/菱形/虚继承布局与二义性、this、thunk |
rtti-typeinfo.md | RTTI:typeid / dynamic_cast / type_info / -fno-rtti |