📜  C++ |构造函数|问题13(1)

📅  最后修改于: 2023-12-03 14:39:54.081000             🧑  作者: Mango

C++ | 构造函数 | 问题13

构造函数是在对象被创建时执行的成员函数,主要用来初始化对象的数据成员。在 C++ 中,构造函数的名称与类名称相同,没有返回类型(包括 void),并且可以重载。在本篇文章中,我们将探讨 C++ 中的一个构造函数问题:如何在构造函数中调用类的另一个构造函数。

问题描述

在某些情况下,我们需要在一个构造函数中调用类的另一个构造函数,以避免相同的代码重复出现。例如:

class MyClass {
public:
    MyClass(int a, int b) {
        // some code here
    }

    MyClass(int a) {
        MyClass(a, 0); // ERROR here
        // some code here
    }
};

在上述代码中,我们定义了一个带有两个参数的构造函数和一个带有一个参数的构造函数,并试图在后者中调用前者。但是,这行代码会导致编译错误。

解决方案

在 C++11 中,我们可以使用委托构造函数的方式来解决这个问题。委托构造函数是在同一类中调用另一个构造函数的构造函数。

我们可以按如下方式重写 MyClass:

class MyClass {
public:
    MyClass(int a, int b) {
        // some code here
    }

    MyClass(int a) : MyClass(a, 0) {
        // some code here
    }
};

在这个重写后的 MyClass 中,我们定义了两个构造函数,其中一个调用了另一个。这种方式更加简洁、易读。

需要注意的是,在委托构造函数中,初始化列表必须调用其它构造函数,并且调用的构造函数必须在同一个类中。

结论

在 C++ 中,可以在构造函数中调用类的另一个构造函数,以避免出现相同的代码。在 C++11 中,可以使用委托构造函数的方式来实现这一点。需要注意的是,委托构造函数必须在同一类中,并且初始化列表必须调用其它构造函数。

参考文献