文档章节

C++ 类与结构体 构造函数 详细相关理解整理

o
 osc_w9s1w4o0
发布于 2019/03/31 21:45
字数 1227
阅读 7
收藏 0

说到构造函数,通常是将讲对象创建时编译器自动调用构造函数为对象初始化,也可以说是分配内存空间。

 学习了构造函数 相对其中牵涉到的一些点作下大概的了解和学习,整理一下只是点。

 


 

这里主要说下  类与结构体的差异/类与结构体包含继承关系时的构造调用/类的初始化列表/默认构造函数/拷贝构造函数以及牵涉到的相关内容

 

结构体和类的区别

  • 对于结构中的实例字段成员,不能在声明时赋值初始化

  • 声明了结构类型后,可以使用new运算符创建构造对象,也可以不用new。若不用new,那在初始化所有字段之前,字段将保持未赋值状态且对象不可用

  • 结构在堆栈中创建,是值类型,而类是引用类型

值类型和引用类型的区别

  • byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存

  • string 和 class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中

    注:new 的位置可以堆可以栈?如何查看具体的位置呢? --- linux

    '在linux目录下:cat /proc/pid/maps查看'

     

    最后一项是映射的文件名。对匿名映射来说,是此段虚拟内存在进程中的角色。[stack]表示在进程中作为栈使用,[heap]表示堆。其余情况则无显示 第一个示例可以确认的是new的数据此时并不在堆数据区中/  then……

    实际上应该在哪呢?——待确认【==|`】

 

结构体与类的构造函数--包含&继承  关系下是否会有差异呢?

他们之间的调用初始化关系:  初始化会分配空间和赋随机值

示例:-(S=Struct C=Class Con=Conntain Inher=Inherit)

 

结论:不论包含还是继承 都会调用 相关的构造函数,不用多次给成员初始化处理

 

 

构造函数相关---调用构造函数的顺序

此处需要使用单步调试确认顺序 (VS2017 使用F10调试)

  • 包含关系中,按照成员声明的顺序进行构造初始化,而不是按照初始化列表的顺序初始化

  •  

  • 继承关系中,先调用父类的构造 ,再按照声明的顺序

 

初始化列表 & 默认构造函数 & 静态构造函数 & 拷贝构造函数

需使用初始化列表的条件:

  • 数据成员是对象,并且这个对象只有含参数的构造函数,没有无参数的构造函数

  • 对象引用或者cosnt修饰的数据成员

  • 子类初始化父类的私有成员,需要在(并且也只能在)参数初始化列表中显示调用父类的构造函数

     

默认构造函数:csdn什么是默认构造函数
  1. 没有带明显形参的构造函数。

  2. 提供了默认实参的构造函数。

warning: 编译器自动合成默认构造函数的误区

  1. 合成默认构造函数总是不会初始化类的内置类型及复合类型的数据成员。(如 int / bool ……)

  2. 分清楚默认构造函数被程序需要与被编译器需要,只有被编译器需要的默认构造函数,编译器才会合成它

    编译器需要去合成默认构造的条件:

    • 含有类对象数据成员,该类对象类型有默认构造函数

    • 基类带有默认构造函数的派生类

    • 带有虚函数的类

    • 带有虚基类的类

静态构造函数

1.静态构造函数既没有访问修饰符,也没有参数

2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类

3.无法直接调用静态构造函数

4.在程序中,用户无法控制何时执行静态构造函数

拷贝构造函数详解

一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量

作用就是用来复制对象的,在使用这个对象的实例来初始化这个对象的一个新的实例

 

  •  

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

pycurl libcurl link-time ssl backend (nss)

pip uninstall pycurlecho 'pycurl==7.19.5.1 --global-option="--with-nss"' > requires.pypip install -r requires.py...

小红手
33分钟前
17
0
计算机网络性能衡量

1、速率 单位时间(s)内传输信息(bit)量 单位:KB/s, MB/s, Gb/s K = 10^3 ,M = 10^6, G=10^9 一般表示的是理想的传输速率 2、带宽 计算机网络中的带宽和通信等领域的带宽概念不一样,计算机网...

osc_np3y0rbq
33分钟前
3
0
互联网掀起农家乐,巨头上演AI掘金战

配图来自Canva **前有网易、阿里AI养猪,后有腾讯AI养鹅,互联网大佬们纷纷玩起了“农家乐”,互联网的生意在尖端技术的引领之下频频跨界,巨头之间的较量也从线上延伸至线下。**自古“民以食...

osc_5cok9i01
35分钟前
9
0
原来!我在4年前就开始体验雾游戏了!

前有云游戏后有雾游戏,游戏的方式看来起来越来越多种多样。那么“震撼业界”的雾游戏到底是什么来头?它依靠什么改变游戏界?它的原理又是什么? 本月月初,著名的日本游戏杂志《Fami通》表...

osc_j34n26zn
36分钟前
11
0
活动预告|田溯宁与你相约GSMA Thrive·万物生晖,分享5G风口下的创新与投资洞察

在万物互联的时代背景下,5G+AI+IoT的技术变革与融合,正在引发一场深刻的全产业创新与变革。5G技术创新、行业应用及投资机遇已成为科技行业所瞩目的焦点。 6月30日,宽带资本董事长田溯宁将...

osc_0qnrwmy3
37分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部