1. 构造函数 (Constructor)
是什么?
构造函数是一个特殊的成员函数,在创建对象时被自动调用。它的主要任务是初始化对象的数据成员,让对象一“出生”就处于一个合理、有效的状态。
核心特性:
- 函数名与类名完全相同。
- 没有返回值,连
void也不写。 - 可以重载,即一个类可以有多个不同参数的构造函数。
- 可以有默认参数。
怎么用?(构造函数的类型与应用)
a. 默认构造函数
这是指不带任何参数的构造函数。
class Box {
public:
// 这是一个用户定义的默认构造函数
Box() {
length = 1.0;
width = 1.0;
height = 1.0;
cout << "默认构造函数被调用!" << endl;
}
// ... 其他成员 ...
private:
double length;
double width;
double height;
};
int main() {
Box b1; // 自动调用默认构造函数,创建一个1x1x1的盒子
return 0;
}
【重要考点】
- 规则:如果你没有为类编写任何构造函数,编译器会自动为你生成一个公有的、无参的默认构造函数(函数体为空)。
- 陷阱:一旦你为类定义了任何一种构造函数(即使是带参数的),编译器就不再为你生成默认构造函数。
class Student {
public:
// 用户只定义了带参数的构造函数
Student(int id) {
student_id = id;
}
private:
int student_id;
};
int main() {
Student s1(101); // 正确
// Student s2; // 编译错误!
// 因为你定义了Student(int),编译器不再提供默认的Student()。
// 除非你再手动添加一个无参的 Student() {} 构造函数。
}
b. 自定义带参构造函数
这是最常用的构造函数,允许在创建对象时传入初始值。
class Box {
public:
Box() {
/* ... */ } // 默认构造函数
// 自定义带参构造函数
Box(double l, double w, double h) {
length = l;
width = w;
height = h;
cout << "带参构造函数被调用!" << endl;
}
private:
double length;
double width;
double height;
};
int main() {
Box b1; // 调用 Box()
Box b2(5.0, 4.0, 3.0); // 调用 Box(double, double, double)
}
c. 带默认参数的构造函数
可以简化多个构造函数的编写,但要小心“二义性”问题。
class Point {
public:
// 一个带默认参数的构造函数可以替代多个重载版本

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



