📅  最后修改于: 2023-12-03 15:29:51.997000             🧑  作者: Mango
在C++中,构造函数是一种特殊的成员函数,在创建对象时自动调用。然而,构造函数具有重载的特性,因为当在一个类中定义了多个构造函数时,编译器将根据实际参数的类型、数量和顺序选择其中一个来实例化对象。
问题7:在多个构造函数中,如何避免重复的代码?
在实现多个构造函数时,会发现它们的实现中有很多相同的代码,这样会导致代码冗余,增加维护难度。为了避免这种情况,可以通过以下两种方式来减少代码冗余:
C++11标准中引入了委托构造函数的概念,它允许一个构造函数调用另一个构造函数,以便复用一些共同的代码逻辑,如下所示:
class MyClass {
public:
// 构造函数1
MyClass(int a, int b) : x(a), y(b) {}
// 构造函数2,委托构造函数
MyClass(int a) : MyClass(a, 0) {}
// 构造函数3,委托构造函数
MyClass() : MyClass(0, 0) {}
private:
int x;
int y;
};
在上面的代码中,构造函数2和构造函数3都调用了构造函数1,以复用共同的代码逻辑。
提取公共代码至私有成员函数,这是一种比较传统的方式。具体实现方法是,将需要共享的代码逻辑封装为一个私有成员函数,然后在其他构造函数中调用该函数。
class MyClass {
public:
// 构造函数1
MyClass(int a, int b) {
init(a, b);
}
// 构造函数2
MyClass(int a) {
init(a, 0);
}
// 构造函数3
MyClass() {
init(0, 0);
}
private:
// 私有成员函数,用于初始化对象
void init(int a, int b) {
// 共同代码逻辑
this->x = a;
this->y = b;
}
private:
int x;
int y;
};
在上面的代码中,init()函数封装了共同的代码逻辑,三个构造函数都调用了init()函数来进行共同的初始化操作。这样也能很好地避免代码的冗余。