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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IE内嵌google chrome frame解决浏览器兼容问题

    IE内嵌google chrome frame解决浏览器兼容问题参考文献:http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自动添加使用chrome的header)http://www.baike.com/wiki/Google+Chrome+Frame(googlechromeframe介绍)http://www.cnbl

    2022年7月16日
  • Groupid(artifact id)

    什么是groupid和artifactId?groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。groupId和artifactId是maven管理项目包时用作区分的字段,就像是地图上的坐标。artifactId:artifactId一般是项目名或者模块名。group…

    2022年4月15日
  • 四款常见数据库比较同步软件汇总

    下载网站:www.SyncNavigator.CN  客服QQ1793040———————————————————-  关于HKROnlineSyncNavigator注册机价格的问题HKROnlineSyncNavigator 8.4.1企业版数据同步软件自2009年第一个版本开发…

    2022年4月3日
  • css transition动画_css3过渡属性有几种

    css transition动画_css3过渡属性有几种css动画效果之transition(动画效果属性)

    2022年4月21日
  • 关于java二维数组长度(length)的知识

    关于java二维数组长度(length)的知识二话不说,呈上代码//定义一个整型数组:3行4列inta[][]=newint[3][4];//获取行数—3行intlenY=a.length;//获取列数—4列intlenX=a[0].length;其实很好理解,因为二维数组可以理解为是一维数组,只不过他的各处的元素是特殊元素—–一维数组a[0][0]a[0][1]a[0][2]…

    2022年6月13日
  • ES-Elasticsearch数据库查询[通俗易懂]

    ES-Elasticsearch数据库查询[通俗易懂]ES增删改查一:结构操作1.查询对应索引的表结构GETbiz_commission_book2.创建表复制代码PUTcfg_send_sku{“settings”:{“number_of_shards”:5,“number_of_replicas”:1},”mappings”:{“cfg_send_sku”:{“properties”:{“obdCode”:{

    2022年6月13日

发表回复

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

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