大家好,又见面了,我是全栈君。
C++的一大特点就是面向对象,面向对象主要就是类的一些相关特性(封装、继承、多态)。
那么在类的继承以及类的成员属性包含其他类实例对象的时候,构造函数的构造顺序到底是怎么样子的呢?相信大家都知道,实例化对象首先需要的是调用自身的构造函数进行分配内存空间之后进行实例化对象,这就是构造函数的整个过程(两步)。
那么当一个类对象既包含了继承关系同时也在自身的成员属性中包含了其他类对象的实例化的时候,那么这时候实例化该类的对象时候,构造函数的顺序会是怎么样子的呢?下面来看看这一段代码吧。
#include "iostream"
using namespace std;
class A {
public:
A() {
cout << "A 类的构造函数" << endl;
}
private:
int i_a;
};
class B {
public:
B() {
cout << "B 类的构造函数" << endl;
}
private:
int i_b;
};
class C :public A{
// 类C继承与类A(C:派生类、子类;A:基类父类)
public:
C() {
cout << "C 类的构造函数" << endl;
}
private:
B b; // 类C中组合有B类对象成员
int i_c;
};
int main()
{
C c; // 实例化一个C类的对象
system("pause");
return 0;
}
这就是一个简单的继承加上组合的小demo,从上面的小demo中可以看出类C继承与类A,并且在类C中组合了类B的实例化对象,那么我们可以直接到以下的结果,可以得知。
A 类的构造函数
B 类的构造函数
C 类的构造函数
构造顺序是首先构造继承的父类,其次构造组合中的实例对象,最后才是构造自己本身。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115096.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...