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


