一. 类和对象1.1 封装1.1.1 封装的意义1.1.2 struct和class区别1.1.3 成员属性设置为私有1.2 对象的初始化和清理1.2.1 构造函数和析构函数1.2.2 构造函数的分类及调用1.2.3 拷贝构造函数调用时机1.2.4 构造函数调用规则1.2.5 深拷贝与浅拷贝1.2.6 初始化列表1.2.7 类对象作为类成员1.2.8 静态成员1.3 C++对象模型和this指针
时间: 2025-08-02 21:34:46 浏览: 14
### C++ 类与对象详解
#### 封装的意义
封装是指通过访问控制机制隐藏数据的具体实现细节,仅暴露必要的接口供外部使用。这种设计使得类内部的数据更加安全,同时也便于维护和扩展[^5]。
#### `struct` 和 `class` 的对比
在 C++ 中,`struct` 和 `class` 都可以用来定义新的复合类型,但它们之间存在一些细微的区别。主要体现在默认的访问权限上:
- 对于 `struct`,其成员默认为公有 (`public`);
- 而对于 `class`,其成员默认为私有 (`private`)。
尽管如此,在功能上两者并无本质差异,因此现代 C++ 更倾向于使用 `class` 来表示具有复杂行为的对象[^1]。
#### 私有成员
私有成员是只有该类本身及其友元才能访问的部分,通常用于保护敏感数据或方法不受外界干扰。通过设置某些字段为私有属性,开发者能够更好地管理程序逻辑并减少潜在错误的发生概率[^3]。
#### 构造函数
构造函数是一种特殊类型的成员函数,它主要用于初始化新创建出来的对象实例。以下是关于它的几个重要特点:
- 名字必须跟所属类别完全一致;
- 不具备任何返回值类型(包括 void);
- 当声明某个特定形式的新实体时会被自动触发执行一次;
- 支持重载以便适应不同场景下的需求[^2]。
#### 析构函数
析构函数则是在销毁一个已经存在的对象之前由系统调用的一个过程,负责清理资源等工作。值得注意的是,每一个非数组型别的单一维度动态分配内存都需要配对相应的释放动作以防泄露问题出现[^4]。
#### 拷贝构造函数与深浅拷贝区别
当复制现有对象到另一个同种类型的变量之中时,默认情况下会采用位级赋值方式完成这项任务——即所谓的“浅拷贝”。然而如果源目标含有指向堆区存储位置的信息,则可能引发双重删除的风险或其他异常状况。为了避免这些问题发生,我们需要自定义版本的拷贝构造函数来进行所谓“深层”的克隆操作。
```cpp
// 浅拷贝示例
class MyClass {
public:
int* ptr;
MyClass(int value) : ptr(new int(value)) {}
};
// 深拷贝示例
class DeepCopyClass {
public:
int* data;
DeepCopyClass(const DeepCopyClass& other) {
this->data = new int(*other.data); // 创建独立副本
}
};
```
#### 初始化列表
为了提高效率或者处理那些无法经由常规途径设定初始状态的情况(比如常量成员),我们可以利用初始化列表来预先指定各个组成部分应有的起始数值。
```cpp
class Example {
private:
const double pi;
public:
Example() : pi(3.14159265358979323846){} // 使用初始化列表给const成员赋初值
};
```
#### 类对象作为成员
有时候我们会遇到这样的情况:某一大型系统的组件是由若干个小规模单元组合而成的整体结构。此时就可以考虑让这些子模块成为母容器的一部分,从而形成嵌套关系。
#### 静态成员
静态成员属于整个类别而非单个个体所有者共享同一份实际储存空间。这意味着无论有多少个具体体现被制造出来,都只会保留唯一的一组共同使用的资料副本。
#### this指针的作用
`this` 是一种隐含传递至每个非静态成员函数内的参数,代表当前正在被执行的操作所关联的那个确切实例。借助它可以区分局部命名冲突或是明确指出应该作用在哪一部分之上。
---
阅读全文
相关推荐
















