从0开始学C++ 第十六课:C++中的初始化列表和构造函数初始化

第十六课:C++中的初始化列表和构造函数初始化

学习目标:

  • 理解初始化列表在C++构造函数中的作用。
  • 学会使用初始化列表来初始化类的成员变量。
  • 掌握初始化列表与构造函数体的执行顺序。

学习内容:

  1. 初始化列表的概念:

    • 初始化列表是构造函数后面跟随的一个冒号和初始化表达式的列表,用于直接初始化成员变量。
    • 它提供了一种比在构造函数体中赋值更高效的初始化方式。
  2. 基本语法:

    • 语法格式:Constructor() : member1(value1), member2(value2) {...}
    • 列表中的成员变量必须按照它们在类中声明的顺序初始化。
  3. 初始化列表的优点:

    • 允许成员变量在构造时直接初始化,避免了先默认初始化然后再赋值的额外开销。
    • 对于常量和引用类型的成员变量,必须在初始化列表中进行初始化。
    • 对于某些类型(如类类型),成员变量可能没有默认构造函数,使用初始化列表可以明确地调用特定的构造函数。
  4. 实例说明:

    • 假设有一个Point类,它有两个私有成员xy,可以使用初始化列表来初始化这些成员。
    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)

  5. 使用场景与用途:

    • 初始化列表应用于任何需要初始化成员变量的场景,尤其是在构造对象时对性能有要求的地方。
    • 它是初始化常量成员、引用成员、没有默认构造函数的类成员的唯一方式。

练习题:

创建一个Rectangle类,它包含两个私有成员变量widthheight。需要你:

  1. 提供一个构造函数,使用初始化列表来初始化这两个变量。
  2. 提供一个成员函数area,计算矩形的面积。
  3. 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类,其中包含了两个私有成员变量widthheight。通过使用初始化列表,我们在构造函数中直接将这两个成员变量初始化。成员函数area简单地返回宽和高的乘积,代表矩形的面积。在main函数中,我们创建了一个Rectangle对象,并打印出其面积。这个练习展示了初始化列表的使用,以及如何在类中封装数据和功能。

你可能感兴趣的:(从0开始学C++,C++,c++,开发语言)