欢迎光临
我们一直在努力

深入理解C++ 构造函数<六> 委托构造函数

委托构造函数(Delegating Constructor)是 C++11 引入的特性,它允许一个构造函数在初始化列表中调用同一个类的另一个构造函数,把初始化的“工作”委托给对方。

它的核心作用是 消除重复的初始化代码。当你有多个构造函数,且它们包含大量相同的初始化逻辑时,只需把核心逻辑写在最“全能”的那个构造函数里,其他构造函数通过委托调用它,代码会变得极其简洁且易于维护。


核心语法规则

  • 在构造函数的初始化列表(: 后面)中,使用 类名(参数) 或 ClassName(参数) 来委托。

  • 限制:一旦使用了委托构造,初始化列表中不能再显式初始化其他成员变量(所有成员初始化都由被委托的目标构造函数完成)。

  • 执行顺序:先执行被委托的构造函数的函数体,执行完毕后,再返回执行当前构造函数的函数体。

#include <iostream>
#include <string>
using namespace std;

class Student {
private:
string name;
int age;

public:
// 1. 最"全能"的构造函数(目标构造函数):接收姓名和年龄
Student(const string& n, int a) : name(n), age(a) {
cout << "[目标构造] 姓名: " << name << ", 年龄: " << age << endl;
}

// 2. 委托构造函数:只接收姓名,默认年龄为 18
// 在初始化列表中调用 Student(n, 18) 委托给上面的构造函数
Student(const string& n) : Student(n, 18) {
cout << "[委托构造-姓名] 年龄被默认设为 18" << endl;
}

// 3. 委托构造函数:无参数,默认姓名为 "匿名",年龄为 0
// 调用 Student("匿名", 0)
Student() : Student("匿名", 0) {
cout << "[委托构造-默认] 创建了一个匿名学生" << endl;
}

// 打印学生信息
void print() const {
cout << "学生信息: " << name << ", " << age << " 岁" << endl;
}
};

int main() {
cout << "— 创建默认学生 —" << endl;
Student s1; // 调用无参构造,委托给全能构造
s1.print();

cout << "\\n— 创建只传入姓名的学生 —" << endl;
Student s2("张三"); // 调用单参构造,委托给全能构造(年龄设为18)
s2.print();

cout << "\\n— 创建传入姓名和年龄的学生 —" << endl;
Student s3("李四", 22); // 直接调用目标构造,没有委托
s3.print();

return 0;
}

赞(0)
未经允许不得转载:171主机测评 » 深入理解C++ 构造函数<六> 委托构造函数
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址