C++11还支持委托构造函数。
委托构造函数允许构造函数调用同一个类的其他构造函数,该构造函数必须放在构造函数初始化器中。
例如:
#include <iostream>
using namespace std;
class A
{
private:
int i=5;
string str="初始值";
public:
A(){
str="委托构造函数";
i=99;
}
A(int ii):A(){
//不能写成AA(int ii):A(),i(ii)
//委托构造函数不能再利用初始化器初始化其他数据成员
i=ii;
}
void show(){
cout<<"i="<<i<<",str="<<str<<endl;
}
};
int main()
{
A a(10);
a.show();
}
运行结果:
但是要注意不要递归委托:例如
#include <iostream>
using namespace std;
class A
{
private:
int i=5;
string str="初始值";
public:
A(string ss):A(555){
str=ss;
}
A(int ii):A("OK"){
//不能写成AA(int ii):A(),i(ii)
//委托构造函数不能再利用初始化器初始化其他数据成员
i=ii;
}
void show(){
cout<<"i="<<i<<",str="<<str<<endl;
}
};
int main()
{
A a(10);
a.show();
}
编译结果:
可以看出,编译并不会报错,但是运行的时候就出错了!