1. 从内存布局看C++对象本质
在C++中,每个类实例都是一个独立的内存实体。当我们声明一个简单类时:
cpp复制class Person {
public:
std::string name;
int age;
void introduce() {
std::cout << "I'm " << name << ", " << age << " years old.\n";
}
};
这个类的实例在内存中会按照成员声明顺序排列(考虑内存对齐)。通过sizeof(Person)可以看到,其大小等于所有数据成员大小之和(成员函数不占用对象内存空间)。这种内存布局直接影响着对象拷贝、传参等行为的效率。
关键点:对象的内存地址就是其第一个数据成员的地址,这是实现多态的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 类关系的五种核心形态
2.1 组合关系(Composition)
最强的包含关系,生命周期完全绑定:
cpp复制class Engine {
// 引擎实现
};
class Car {
private:
Engine engine; // 组合关系
};
特点:
- 引擎对象在Car对象构造时创建
- 引擎对象随Car对象销毁而销毁
- 外部无法直接访问引擎对象
2.2 聚合关系(Aggregation)
较弱的包含关系,生命周期独立:
cpp复制class Department;
class Employee {
Department* dept; // 聚合关系
};
特点:
- 部门对象可以独立存在
- 员工对象通过指针持有部门引用
- 部门销毁不影响员工对象存在
2.3 关联关系(Association)
最弱的对象间关系:
cpp复制class Student;
class Course {
std::vector<Student*> students; // 关联关系
};
特点:
- 双向可导航(学生也可以持有课程指针)
- 关系可以动态建立和解除
- 不涉及生命周期管理
2.4 继承关系(Inheritance)
经典的"is-a"关系:
cpp复制
