C++中类中同时存在继承以及组合时候,构造函数的构造顺序

C++中类中同时存在继承以及组合时候,构造函数的构造顺序

大家好,又见面了,我是全栈君。

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 类的构造函数

构造顺序是首先构造继承的父类,其次构造组合中的实例对象,最后才是构造自己本身。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115096.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据架构之– Lambda架构「建议收藏」

    大数据架构之– Lambda架构「建议收藏」一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数据时,同时发挥流处理和批处理的优势。通过批处理提供全面、准确的数据,通过流处理提供低延迟的数据,从而达到平衡延迟、吞吐量和容错性的目的。为了满足下游的即席查询,批处理和流处理的结果会进行合并。二、Lambda架构组成Lambda架构包含三层,BatchLayer、SpeedLayer和ServingLayer。架.

    2022年6月25日
    33
  • MySQL中DML语句和事务的概念「建议收藏」

    MySQL中DML语句和事务的概念「建议收藏」ML语句知识要点DML语句插入行到表中删除表中的行更新表中的行控制事务DML语句DML:DATAMANIPULATIONLANGUAGE(数据操纵语言),由INSERT、UPDATE、DELETE等语句构成,用来修改表中的数据INSERT语句1.带VALUES子句的INSERT语句INSERT[INTO]tbl_name[(col_name,…)]{VA…

    2022年8月30日
    2
  • 阿里,B站小伙伴刚刚分享的大数据开发运维学习规划,抓紧收藏

    一.大数据运维与架构课程体系1.0课程与老师介绍本课程是专门培养大数据运维与架构方向专业人才的体系化课程。课程所有讲师小伙伴全部是在职的知名企业大数据开发专家,大数据技术专家职位员工,非专门的培训机构老师(小伙伴当前在职企业阿里巴巴,哔哩哔哩,平安集团,苏宁易购,美团等,运维集群规模大到10000+节点,课程内容可以满足市面上80%以上企业的大数据运维工作)。课程以企业大数据集群运维实战和招聘需求为出发点,深入浅出,有重点地为大家系统化地讲解整个大数据运维需要的知识点,实战教学,多年运维经验分享

    2022年4月17日
    47
  • java 查看线程死锁_java 查看线程死锁

    java 查看线程死锁_java 查看线程死锁那我们怎么确定一定是死锁呢?有两种方法。1>使用JDK给我们的的工具JConsole,可以通过打开cmd然后输入jconsole打开。1)连接到需要查看的进程。2)打开线程选项卡,然后点击左下角的“检测死锁”3)jconsole就会给我们检测出该线程中造成死锁的线程,点击选中即可查看详情:从上图中我们可以看出:①在线程Thread-1中,从状态可以看出,它想申请Paper这个资源,但是这个资…

    2022年7月13日
    23
  • 华为海思六大部门_海思3516

    华为海思六大部门_海思351651-20210316华为海思Hi3516DV300的linux系统编译2021/3/1610:42https://xueqiu.com/7970718062/159110439官井想开挖掘机来自iPhone发布于2020-09-1315:18$润和软件(SZ300339)$HiSparkAICamera套件l支持鸿蒙OS、LiteOS、Linux系统,方便进行产品的原型验证和快速开发l板载海思Hi3516DV300芯片,内置双核Cortex-A7,最高运行评率900M.

    2022年9月13日
    0
  • 机器学习:海量数据挖掘解决方案

    达观数据团队分享基于大数据的机器学习应用经验。

    2022年4月13日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号