C++ 委派构造函数
首先我们看下如下代码例子:
class TestA {
public:
TestA() : a(1), b(2) {
Init();
}
TestA(int index) : a(index), b(2) {
Init();
}
TestA(int index1, int index2) : a(index1), b(index2) {
Init();
}
private:
void Init();
int a;
int b;
};
TestA有三个构造函数,不同的初始化列表,并且都调用了相同的函数Init。
除了初始化列表不同,其他部门三个构造函数基本都是一样的。
c++11里,我们可以通过委派构造函数来达到以上代码效果。
class TestA {
public:
TestA() {
Init();
}
TestA() : TestA() {
a = 1;
b = 2;
}
TestA(int index) : TestA() {
a = index;
b = 2;
}
TestA(int index1, int index2) : TestA() {
a = index1;
b = index2;
}
private:
void Init();
int a;
int b;
};
另外委派构造不能有初始化列表。构造函数不能同时委派和使用初始化列表。所以如果委派构造函数要给变量赋初值,初始化代码必须放在函数体中。
本文介绍了C++11引入的委派构造函数特性,通过示例展示了如何使用委派构造函数简化代码,避免重复。文章指出,委派构造函数不能有初始化列表,初始化工作必须在函数体内完成,并强调了这一特性在实现不同构造函数间共享代码逻辑时的优势。
1095

被折叠的 条评论
为什么被折叠?



