1. 类与对象基础回顾
在C++中,类(class)是面向对象编程的核心概念,它将数据(成员变量)和操作这些数据的方法(成员函数)封装在一起。对象则是类的具体实例。理解类和对象的关系,就像理解"设计图"和"根据设计图建造的房子"之间的关系。
C++中的类有六个(实际上是八个)特殊的默认成员函数,它们由编译器自动生成,但开发者也可以自定义实现。这些默认成员函数包括:
- 构造函数
- 析构函数
- 拷贝构造函数
- 拷贝赋值运算符
- 移动构造函数(C++11新增)
- 移动赋值运算符(C++11新增)
提示:虽然编译器会自动生成这些函数,但理解它们的行为并知道何时需要自定义实现,是写出健壮C++代码的关键。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 构造函数深度解析
2.1 构造函数的基本特性
构造函数是类中最重要的成员函数之一,它负责初始化对象。与普通函数相比,构造函数有以下显著特点:
- 命名规则:必须与类名完全相同
- 返回值:没有返回值(连void都不需要写)
- 调用时机:在对象创建时自动调用
- 重载能力:可以定义多个构造函数(重载)
- 默认生成:如果类中没有显式定义构造函数,编译器会自动生成一个无参的默认构造函数
cpp复制class Date {
public:
// 构造函数声明
Date(); // 无参构造函数
Date(int year, int month, int day); // 带参构造函数
};
2.2 默认构造函数的三种形式
在C++中,默认构造函数有三种形式:
- 编译器自动生成的构造函数
- 用户定义的无参构造函数
- 用户定义的全缺省构造函数
注意:这三种形式不能同时存在,否则会导致调用时的歧义。例如,同时定义无参构造函数和全缺省构造函数虽然语法上合法,但在调用时会产生二义性。
cpp复制class Date {
public:
Date() { /*...*/ } // 无参构造
Date(int y = 1, int m = 1, int d = 1) { /*...*/ } // 全缺省构造
// 上述两个构造函数不能同时存在
};
