C++学习随笔——委托构造函数

kitanoki / 2024-08-30 / 原文

C++11 中,引入了委托构造函数(delegating constructors)的概念。

委托构造函数允许一个构造函数调用同一个类中的另一个构造函数,以减少代码重复。

 

委托构造函数的语法:

class MyClass {
public:
    MyClass(int x) : value(x) {
        // 这个构造函数初始化 value
    }

    MyClass() : MyClass(0) {
        // 委托给 MyClass(int) 构造函数,将 value 初始化为 0
    }

private:
    int value;
};
  • MyClass(int x) 是一个带参数的构造函数,它负责初始化 value
  • MyClass() 是无参数的构造函数,它在初始化列表中调用了 MyClass(int x),并传递了一个默认值 0。这种调用方式就是委托构造函数。

 

以下是一个更详细的例子:

#include <iostream>
#include <string>

class Person {
public:
    // 基本构造函数
    Person(const std::string& name, int age) : name(name), age(age) {
        std::cout << "Person(const std::string&, int) called" << std::endl;
    }

    // 委托构造函数,默认年龄为 0
    Person(const std::string& name) : Person(name, 0) {
        std::cout << "Person(const std::string&) called" << std::endl;
    }

    // 委托构造函数,默认姓名为空字符串和年龄为 0
    Person() : Person("", 0) {
        std::cout << "Person() called" << std::endl;
    }

    void printInfo() const {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }

private:
    std::string name;
    int age;
};

int main() {
    Person p1("Alice", 30); // 调用 Person(const std::string&, int)
    Person p2("Bob");        // 调用 Person(const std::string&)
    Person p3;               // 调用 Person()

    p1.printInfo();
    p2.printInfo();
    p3.printInfo();

    return 0;
}