C++ 委托构造函数
C++ 委托构造函数
委托构造函数 是一项功能,它简化了类中构造函数处理初始化任务的方式。它通过减少冗余,并允许一个构造函数调用同一个类中的另一个构造函数,使对象初始化的维护更加轻松。
委托构造函数的使用
在类设计中,通常使用多个构造函数来处理不同的初始化场景。然而,这可能会导致重复代码,因为每个构造函数都可能重复类似的初始化逻辑。
通过使用委托构造函数,可以避免代码冗余。单个"主"构造函数可以处理大多数初始化任务,而其他构造函数则委托给它。
这种方法遵循DRY(不要重复自己)原则,使代码更易于维护。
委托构造函数的语法
委托构造函数的语法涉及调用初始化器列表中的另一个构造函数。
class Example {
public:
// 主构造函数
Example(int value) : data(value) {}
// 委托构造函数
Example() : Example(0) {}
private:
int data;
};
其中,
- Example(int value) 是执行实际初始化的主构造函数。
- Example() 是一个委托构造函数,它调用 Example(int value),默认值为 0。
使用委托构造函数的规则
在 C++11 及更高版本中使用委托构造函数时,适用以下规则:
- 在 C++11 及更高版本中,一个构造函数只能委托给另一个构造函数。
- 委托必须发生在同一个类中。
- 循环委托(例如 A() : A(x) 和 A(x) : A())是被禁止的,否则会导致编译时错误。
示例委托构造函数
这是一个委托构造函数的基本简单程序:
#include <string>
#include <iostream>
class Student {
public:
// 主构造函数
Student(const std::string& name, int age, double grade)
: name(name), age(age), grade(grade) {}
// 委托具有默认等级的构造函数
Student(const std::string& name, int age)
: Student(name, age, 0.0) {}
// 委托构造函数,使用默认年龄和年级
Student(const std::string& name)
: Student(name, 18, 0.0) {}
void display() const {
std::cout << "Name: " << name
<< ", Age: " << age
<< ", Grade: " << grade << "";
}
private:
std::string name;
int age;
double grade;
};
int main() {
Student s1("Navya", 20, 90.5);
Student s2("Divya", 22);
Student s3("Kavya");
s1.display();
s2.display();
s3.display();
return 0;
}
输出
Name: Navya, Age: 20, Grade: 90.5 Name: Divya, Age: 22, Grade: 0 Name: Kavya, Age: 18, Grade: 0
委托构造函数的优势
使用委托构造函数的优势如下:
- 集中初始化 − 通过将初始化逻辑整合到单个构造函数中,您的代码将更易于阅读和维护
- 避免冗余 − 重用构造函数逻辑可消除重复代码。
- 易于修改 − 只需在主构造函数中更改初始化逻辑即可。

