C++ 核心机制与内存管理
面向对象与面向过程
面向过程编程更关注解决问题的步骤,将程序视为一系列函数或过程的组合。每个函数完成具体任务,数据在函数间传递。
面向对象编程 (OOP) 则关注如何将现实事物抽象为对象。对象包含数据(属性)和操作数据的方法。思想是将数据和操作封装在一起,通过对象交互实现功能。
三大特性
- 封装:数据和操作封装在对象内部,外部只能通过接口访问。
- 继承:新类可继承并扩展原有类的属性和方法。
- 多态:不同对象对同一方法做出不同响应,增强灵活性。
简单来说,面向过程是把程序看作由函数组成的过程,而面向对象则是将元素视为对象。
C 语言与 C++ 的区别
- 头文件:C 语言常用
.h,C++ 虽兼容但推荐使用标准库头文件。 - 布尔类型:C99 之前无布尔类型,用 0 表示假,非 0 表示真;C++ 内置
bool类型。 - 编译器效率:C++ 因支持更多高级特性,编译开销略高于 C,但提供了更强的抽象能力。
- 语言定位:C++ 不是更好的 C,而是基于 C 的另一种语言。它包含 C 的特性,同时支持面向对象,易于维护、复用和扩展。
- 重载:C 语言不支持函数重载,C++ 支持。重载指同一作用域下函数名相同但参数类型、个数或顺序不同。C++ 编译器通过修饰函数名来区分重载函数。
C++ 编译过程
编译流程分为四个阶段:预处理、编译、汇编、链接。
- 预处理:处理
#开头的指令,如展开宏定义、插入头文件、删除注释。生成.i文件。 - 编译:将源代码转换为汇编代码,生成
.s文件。 - 汇编:将汇编代码翻译成机器指令的目标文件,如
.o或.obj。 - 链接:将所有目标文件和库文件连接成可执行文件(Windows 的
.exe或 Linux 的.out)。这一步解决了跨文件的符号引用问题。
多态详解
多态是面向对象的三大特征之一,指不同对象调用同一行为表现出不同形式。可以理解为'一个接口,多种实现'。
分类
- 静态多态:编译期间确定绑定,如函数重载、运算符重载、函数模板。
- 动态多态:运行期间确定绑定,通过虚函数重写实现,属于晚绑定机制。
虚函数
概念与底层
在基类函数名前加 virtual 关键字声明为虚函数。底层通过虚函数表(vtable)和虚表指针(vptr)实现。每个含虚函数的类都有一个虚函数表,存储所有虚函数地址。对象创建时初始化 vptr 指向对应的虚表。子类继承父类时会继承虚表,若重写虚函数则替换表中地址,从而实现运行时多态。
构造函数与析构函数
- 构造函数不能设为虚函数:对象创建时需先调用构造函数,此时虚表指针尚未建立,无法支持虚函数机制。
- 虚析构函数:建议将父类析构函数设为虚函数,确保通过基类指针删除对象时能正确释放子类资源。
重载、重写与隐藏
- 重载 (Overload):同一类中名字相同但参数不同的函数。用于处理类似任务。


