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;
}
标签:初始化,委托,int,value,C++,MyClass,随笔,构造函数 From: https://www.cnblogs.com/kitanoki/p/18387940