委托构造函数与继承构造函数
委托构造函数
允许同一类中的构造函数调用另一个构造函数,以复用初始化逻辑。
-
委托构造函数不能同时初始化成员变量,只能委托给其他构造函数。
-
避免循环委托(如构造函数A委托给B,B又委托给A)。
class MyClass {
public:
MyClass(int a, int b) : x(a), y(b) {} // 主构造函数
MyClass() : MyClass(0, 0) {} // 委托构造函数
MyClass(int a) : MyClass(a, 0) {} // 另一个委托
private:
int x, y;
};
继承构造函数
派生类通过using
声明直接继承基类的构造函数,无需重复编写。
-
继承的构造函数仅初始化基类部分,派生类的新成员需通过类内初始值或默认初始化。
-
若派生类已定义同名构造函数,会导致冲突。
-
继承后的构造函数访问权限由
using
声明的位置决定(如public
或protected
)。
class Base {
public:
Base(int a) {}
Base(double b) {}
};
class Derived : public Base {
public:
using Base::Base; // 继承Base(int)和Base(double)
int d{0}; // 类内初始化新成员
};