c++ 继承类的构造函数
在C++中,构造函数本身并不直接“继承”自基类。但是,当子类(派生类)继承自基类时,子类可以(并且通常必须)在其构造函数中调用基类的构造函数来初始化基类部分。
这里的关键是,子类构造函数不继承基类的构造函数,而是必须显式或隐式地调用它们以确保基类部分被正确初始化。如果基类有默认构造函数(即没有参数的构造函数),那么子类构造函数可以省略对基类构造函数的显式调用,编译器会自动插入对基类默认构造函数的调用。但是,如果基类没有默认构造函数,或者子类构造函数需要传递特定参数给基类构造函数,那么子类构造函数就必须在初始化列表中显式地调用基类构造函数。
例如:
class Base {
public:
Base() { // 默认构造函数
// 初始化代码
}
Base(int x) { // 带参数的构造函数
// 使用x进行初始化
}
};
class Derived : public Base {
public:
Derived() : Base() { // 隐式调用Base的默认构造函数
// Derived的初始化代码
}
Derived(int x, int y) : Base(x) { // 显式调用Base的带参数构造函数
// 使用y进行Derived的初始化
}
};
在这个例子中,Derived
类继承自Base
类。Derived
有两个构造函数:一个默认构造函数和一个带两个参数的构造函数。在Derived
的默认构造函数中,通过: Base()
隐式地调用了Base
的默认构造函数。在Derived
的带两个参数的构造函数中,通过: Base(x)
显式地调用了Base
的带参数构造函数,并将x
作为参数传递给它。
因此,虽然构造函数本身不继承,但子类构造函数必须负责调用基类构造函数来确保基类部分被正确初始化。