在本教程中,我们将学习构造函数的调用顺序,如果对C++中的构造函数不熟悉,可以翻看以前的C++构造函数教程。
当我们从基类派生一个类时,基类的所有数据成员都将成为派生类的成员,我们使用构造函数来初始化数据成员,这里就会有一个问题,谁将负责初始化这些被继承的数据?要初始化这些数据就必须要使用构造函数,这就是基类的构造函数先被调用的原因,在下面给出的示例中,我们可以看到继承类中构造函数的执行顺序如下:
#include <iostream>
using namespace std;
class Base
{
int x;
public:
// 默认构造函数
Base()
{
cout << "基类默认构造函数\n";
}
};
class Derived : public Base
{
int y;
public:
// 默认构造函数
Derived()
{
cout << "派生类默认构造函数\n";
}
// 带参数的构造函数
Derived(int i)
{
cout << "派生类带参数的构造函数\n";
}
};
int main()
{
Base b;
Derived d1;
Derived d2(10);
}
以上实例输出结果:
基类默认构造函数 基类默认构造函数 派生类默认构造函数 基类默认构造函数 派生类带参数的构造函数
让我们看看我们如何在派生类中调用参数化构造函数,我们需要在派生类中使用:
运算符显式地调用基类的带参数的构造函数。
#include <iostream>
using namespace std;
class Base
{
int x;
public:
// 带参数的构造函数
Base(int i)
{
x = i;
cout << "基类带参数的构造函数\n";
}
};
class Derived: public Base
{
int y;
public:
// 带参数的构造函数
Derived(int j):Base(j)
{
y = j;
cout << "派生类带参数的构造函数\n";
}
};
int main()
{
Derived d(10) ;
}
以上实例输出结果:
基类带参数的构造函数 派生类带参数的构造函数
C++ 中具有继承的构造函数调用的顺序,总结一下,有如下原则:
基类
开始,如果有多个基类,则从最左边的基类构造函数调用,如果存在 virtual
继承,则优先级更高。类
本身就被构造好了。相关教程: