从0开始学C++ 第十六课:C++中的初始化列表和构造函数初始化
第十六课:C++中的初始化列表和构造函数初始化
学习目标:
- 理解初始化列表在C++构造函数中的作用。
- 学会使用初始化列表来初始化类的成员变量。
- 掌握初始化列表与构造函数体的执行顺序。
学习内容:
-
初始化列表的概念:
- 初始化列表是构造函数后面跟随的一个冒号和初始化表达式的列表,用于直接初始化成员变量。
- 它提供了一种比在构造函数体中赋值更高效的初始化方式。
-
基本语法:
- 语法格式:
Constructor() : member1(value1), member2(value2) {...}
- 列表中的成员变量必须按照它们在类中声明的顺序初始化。
- 语法格式:
-
初始化列表的优点:
- 允许成员变量在构造时直接初始化,避免了先默认初始化然后再赋值的额外开销。
- 对于常量和引用类型的成员变量,必须在初始化列表中进行初始化。
- 对于某些类型(如类类型),成员变量可能没有默认构造函数,使用初始化列表可以明确地调用特定的构造函数。
-
实例说明:
- 假设有一个
Point
类,它有两个私有成员x
和y
,可以使用初始化列表来初始化这些成员。
class Point { private: int x; int y; public: // 使用初始化列表 Point(int x, int y) : x(x), y(y) void print() { std::cout << "Point(" << x << ", " << y << ")" << std::endl; } };
- 使用
Point
类并调用print
方法:
int main() { Point p(1, 2); p.print(); // 输出: Point(1, 2) return 0; }
预计输出效果:
Point(1, 2)
- 假设有一个
-
使用场景与用途:
- 初始化列表应用于任何需要初始化成员变量的场景,尤其是在构造对象时对性能有要求的地方。
- 它是初始化常量成员、引用成员、没有默认构造函数的类成员的唯一方式。
练习题:
创建一个Rectangle
类,它包含两个私有成员变量width
和height
。需要你:
- 提供一个构造函数,使用初始化列表来初始化这两个变量。
- 提供一个成员函数
area
,计算矩形的面积。 - 在
main
函数中创建一个Rectangle
对象,设置宽为5,高为3,然后打印出矩形的面积。
// 你的代码
class Rectangle {
private:
int width;
int height;
public:
// 初始化列表在这里
Rectangle(int w, int h) : width(w), height(h) int area() const {
return width * height;
}
};
int main() {
Rectangle rect(5, 3);
std::cout << "Area: " << rect.area() << std::endl; // 应该输出矩形的面积
return 0;
}
// 预计输出效果
// Area: 15
答案解析:
在这个练习中,我们定义了一个Rectangle
类,其中包含了两个私有成员变量width
和height
。通过使用初始化列表,我们在构造函数中直接将这两个成员变量初始化。成员函数area
简单地返回宽和高的乘积,代表矩形的面积。在main
函数中,我们创建了一个Rectangle
对象,并打印出其面积。这个练习展示了初始化列表的使用,以及如何在类中封装数据和功能。