Skip to content

C++ 面向对象(OOP)与多态专题

一句话总览

OOP 三大特性:封装、继承、多态。C++ 面试 OOP 部分几乎都围绕 虚函数、多态实现、类内存布局、构造/析构 展开,且极喜欢面试官追问「为什么这么设计」。

问题清单(自测)

概念 / 特性

  1. 面向对象三大特性是什么?如何理解?
  2. C++ 与其它语言 OOP 差异、struct vs class?
  3. 重载(overload)/ 重写(override)/ 隐藏(hide)的区别?
  4. 构造函数 / 析构函数 / 拷贝构造 / 赋值 / 移动,默认生成的五个(六个)特殊成员是什么?

虚函数 / 多态(重点中的重点)

  1. 什么是多态?编译期多态(模板重载)与运行期多态(虚函数)区别?
  2. 虚函数表(vtable)与虚函数指针(vptr)的内存布局?
  3. 为什么析构函数要写成虚函数?为什么构造函数不能是虚函数?
  4. 纯虚函数、抽象类、接口类?
  5. 虚函数表是存在哪里?一个类几个 vptr?(多继承)
  6. 基类指针 delete 派生类对象安全吗?为什么?
  7. 静态绑定 vs 动态绑定?(虚函数调用为何查表)

类内存 / 对象模型

  1. 空类大小?为什么是 1?
  2. 有虚函数后的对象大小加了多少?vptr 放哪?
  3. 多继承的内存布局、菱形继承(virtual 继承)?
  4. struct 布局要点(内存对齐、位域)见 memory 篇。

子文档

文件内容
polymorphism.md多态机制、动态绑定
vtable.md虚表/虚指针内存模型、对象大小
virtual-destructor.md虚析构/构造辨析、特殊成员函数三/五规则
concepts.md重载重写隐藏、struct/class/union、访问控制
inheritance-deep.md多继承/菱形/虚继承布局与二义性、this、thunk
rtti-typeinfo.mdRTTI:typeid / dynamic_cast / type_info / -fno-rtti

C++ 面试八股 · VitePress 版