C++ 面向对象编程(OOP)核心知识体系八大章节完整参考手册 ·涵盖C++11/14/17现代特性目录第一章 类与对象基础1.1 面向对象思想1.2 类的定义与实例化1.3 访问控制1.4 成员变量与成员函数第二章 对象的初始化与清理(生命周期)2.1 构造函数2.2 析构函数2.3 深拷贝与浅拷贝2.4 初始化列表2.5 类对象作为成员第三章 封装与对象模型3.1 封装的意义3.2 C++ 对象内存模型3.3 this 指针3.4 const 与类3.5 友元第四章 静态成员与单例模式4.1 静态成员变量4.2 静态成员函数4.3 单例模式第五章 运算符重载5.1 重载规则与限制5.2 常用运算符重载5.3 输入输出重载5.4 特殊运算符重载第六章 继承6.1 继承方式6.2 继承中的对象模型6.3 同名隐藏6.4 多继承6.5 虚继承第七章 多态(核心难点)7.1 静态多态与动态多态7.2 虚函数7.3 虚析构函数7.4 纯虚函数与抽象类7.5 重写、重载与隐藏第八章 现代 C++ 面向对象扩展(C++11 及以后)8.1 右值引用与移动语义8.2 完美转发8.3 override 与 final8.4 = delete 与 = default8.5 智能指针与面向对象第一章 类与对象基础1.1 面向对象思想面向过程编程(POP)以函数为核心,将程序分解为一系列步骤;面向对象编程(OOP)则以"对象"为核心,将数据与操作数据的方法封装在一起,更贴近现实世界的建模方式。OOP 三大核心特性:封装(Encapsulation):将数据与方法绑定,隐藏内部实现细节,对外暴露接口。继承(Inheritance):子类复用父类的属性与行为,实现代码复用与层次化设计。多态(Polymorphism):同一接口在不同对象上表现出不同行为,提升程序灵活性。💡 OOP的核心价值:高内聚、低耦合,使大型软件系统更易维护与扩展。1.2 类的定义与实例化使用 class 或 struct 关键字定义类。两者的核心区别在于默认访问权限:特性classstruct默认访问权限privatepublic默认继承方式private 继承public 继承常见用途封装复杂对象简单数据聚合(POD)类的声明与对象创建示例:class Person {public: std::string name; int age; void greet() { std::cout "Hi, I am " name std::endl; }};Person p1; // 栈上创建对象Person* p2 = new Person(); // 堆上创建对象(需手动 delete)delete p2;1.3 访问控制C++ 提供三种访问修饰符,控制类成员的可见性:修饰符类内部派生类类外部public✓✓✓protected✓✓✗private✓✗✗💡良好实践:成员变量通常声明为private,通过public的getter/setter方法访问,实现信息隐藏。1.4 成员变量与成员函数成员变量(属性)描述对象的状态,成员函数(方法)描述对象的行为。成员函数可在类内声明并实现,也可在类外使用作用域解析运算符 :: 实现:class Circle {private: double radius;public: void setRadius(double r); // 类内声明 double area() const; // 类内声明};// 类外实现void Circle::setRadius(double r) { radius = r; }double Circle::area() const { return 3.14159 * radius * radius; }第二章 对象的初始化与清理(生命周期)2.1 构造函数构造函数在对象创建时自动调用,用于初始化成员变量。构造函数名与类名相同,无返回值。默认构造函数无参数的构造函数。若未定义任何构造函数,编译器自动生成一个空的默认构造函数。有参构造函数class Box {public: int width, height; Box(int w, int h) : width(w), height(h) {} // 有参构造};拷贝构造函数以同类对象为参数,创建一个新对象(值语义复制)。参数必须为 const 引用,防止无限递归:Box(const Box other) : width(other.width), height(other.height) {}移动构造函数(C++11)接受右值引用参数,将资源"转移"而非复制,避免深拷贝开销:Box(Box other) noexcept : width(other.width), height(other.height) { other.width = 0; other.height = 0; // 置空原对象}💡构造函数调用顺序:基类构造→成员对象构造→本类构造体执行。2.2 析构函数析构函数在对象销毁时自动调用,用于释放资源(如堆内存、文件句柄等)。析构函数名为 ~类名,无参数,无返回值:class Buffer {private: char* data;public: Buffer(int size) { data = new char[size]; } ~Buffer() { delete[] data; data = nullptr; } // 释放堆内存};析构顺序与构造顺序相反:本类析构 → 成员对象析构 → 基类析构。2.3 深拷贝与浅拷贝当类中含有指针成员时,编译器默认生成的拷贝构造函数执行浅拷贝(仅复制指针值),导致两个对象共享同一块堆内存,析构时发生"双重释放"错误。类型行为风险浅拷贝(默认)复制指针地址,两对象共享内存析构时 double free,数据竞争深拷贝(自定义)重新分配内存并复制数据内容