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;
};
另外委派构造不能有初始化列表。构造函数不能同时委派和使用初始化列表。所以如果委派构造函数要给变量赋初值,初始化代码必须放在函数体中。
|