什么是委派构造函数
当某一个类或者结构体含有多个构造函数,并且构造函数里面有许多相同的代码,那么可以把相同的代码抽取出来,写成一个通用的构造函数,其他构造函数通过委派上述通用的构造函数,达到减少代码书写量的目的。
class C {
C(int a_) {
work1();
work2();
work3();
a = a_;
}
C(int a_, double b_) {
work1();
work2();
work3();
b = b_;
}
C(int a_, char c_) {
work1();
work2();
work3();
c = c_;
}
private:
int a;
double b;
char c;
void work1();
void work2();
void work3();
};
上述类C拥有三个构造函数,但是它们都执行相同的一部分代码——work1、work2和work3。可以通过书写一个通用的构造函数,替换掉多余重复的代码。其中通用的构造函数叫做目标函数,委派目标函数的构造函数称为委派构造函数。
class C {
public:
C() {
work1();
work2();
work3();
}
C(int a_) :C() {
a = a_;
}
C(int a_, double b_):C() {
b = b_;
}
C(int a_, char c_) :C() {
c = c_;
}
private:
int a;
double b;
char c;
void work1() {
printf("do work1\n");
}
void work2() {
printf("do work2\n");
}
void work3() {
printf("do work3\n");
}
};
上述代码的第一个构造函数就是目标函数,紧随其后的三个带参数的构造函数通过委派的方式调用目标函数完成初始化。
注意要点
1、委派构造函数不能含有初始化列表,但是可以通过书写含有初始化列表的目标函数达到类似的效果。
2、目标函数的执行是先于委派构造函数的函数体的。