c++学习笔记——构造函数
构造函数定义:每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。
需要注意的几点:
1:构造函数不能被声明为const的,当我们创建一个const对象时,直到构造函数完成初始化过程,对象才能真正取得其“常量”属性。因此构造函数在const对象的构造过程中可以向其写值。
2:只有类中没有声明任何构造函数时,编译器才会自动地生成默认构造函数。(依据:如果一个类子某种情况下需要控制对象的初始化,那么该类很可能在所有的情况下都需要控制——摘自c++primer)
3:如果类包含有内置类型或者复合类型的成员,则只有当这些成员全都被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数。
4:如果类中含有其他类的类型的成员且这个成员的类型没有默认构造函数,那么编译器无法初始化该成员。对于这样的类我们必须自定义默认构造函数,否则该类将没有可用的默认构造函数。
5:=default的含义,在c++11新标准中,如果我们需要默认的行为,那么可以通过在参数列表的后面写上=default来要求编译器生成构造函数。其中,如果=default可以出现在类的内部也可以出现再类的外部。和其他函数一样,如果=default出现在类的内部,则默认构造函数是内联的,如果它在类的外部,则该成员默认情况下不是内联的。
6:类中的成员变量在执行构造函数之前会被默认初始化,所以在初始化列表中初始化成员变量比在构造函数内初始化成员变量效率更高。
7:成员的初始化顺序和初始化列表中的顺序无关,和在类中定义它们的顺序有关。所以要注意初始化列表的使用,防止出现在没有初始化一个变量时,用它初始化另一个变量。这是后会导致不可预知的错误。
8:如果一个构造函数为所有的参数都提供了默认实参,则它实际上也定义了默认构造函数。
9:委托构造函数。一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说它把它自己的一些职责委托给其他构造函数。
c++学习笔记——构造函数的更多相关文章
- JavaScript学习笔记-构造函数
什么是构造函数 简单说构造函数是类函数,函数名与类名完全相同,且无返回值.构造函数是类的一个特殊成员函数. JavaScript构造函数 * 在JavaScript的世界里没有类的概念,JavaScr ...
- JS学习笔记-构造函数篇
创建实例 funtion Fn (){ var num = 10; this.x = 100; this.getX = function(){ cons ...
- C++学习笔记-构造函数和析构函数
构造函数和析构函数是C++的重要组成部分,了解构造函数和析构函数有助于深入了解C++ 构造函数 构造函数产生的原因 在C++中,有时候需要在对象创建的时候初始化数据,如果采用普通函数的话,每次初始化都 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
这节课在p26.拷贝构造中讲的很清楚,建议大家耐心的去看下. 什么时候会发生拷贝构造: 对象之间的初始化赋值 使用对象作为变量进行函数传参(通常使用引用来传参从而减去不必要的拷贝构造,提高效率和代码健 ...
- [javase学习笔记]-7.2 构造函数与一般函数的差别
这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...
- [javase学习笔记]-7.5 构造函数须要注意的几个细节
这一节我们简单的说几个在使用构造函数时须要注意的细节. 通过我们前几节的学习,我们对构造函数有了一个比較清楚的认识,当我们在创建对象时.我们会调用构造函数.那么我们在定义和调用构造函数时.须要注意哪些 ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
随机推荐
- rsync异机备份
参考http://www.cnblogs.com/itech/archive/2009/08/10/1542945.html 1.服务器 新建/etc/rsyncd.conf ->新建/etc ...
- android的ArrayMap类
运行的时候出现: java.lang.NoClassDefFoundError: android.util.ArrayMap http://stackoverflow.com/questions/24 ...
- 【转】WebKit 与 V8 的关系
页面的绘制(绘制,就是把一个HTML文件变成一个活灵活现的页面展示的过程...),只有一半轮子是Chrome自己做的,还有一部分来自于WebKit,这个Apple打造的Web渲染器...之所以说是一半 ...
- MySQL下载及安装
MySQL官网 http://dev.mysql.com/downloads/ Download --> Community --> MySQL Community Server 选择操 ...
- 51nod 1290 Counting Diff Pairs 莫队 + bit
一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[j]中,有多少对数,abs(A[i] - A[j]) <= K(abs表示绝对值) ...
- 少见的sql
1,values 的新用法,出现自2008 SELECT * FROM table AS a ,,,'qq3')) tem(id,name) ON a.id=tem.id insert into xx ...
- 异步数据库查询 Z
Introduction Microsoft .NET 4.5 introduced new "async and await" methods to provide an eas ...
- Android String操作
android String.valueOf(ch).getBytes("GBK") --------------------------------------------- S ...
- 在.NET中使用EPPlus生成Excel报表 .
--摘抄自:http://blog.csdn.net/zhoufoxcn/article/details/14112473 在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的 ...
- goldengate 参数之GETTRUNCATES | IGNORETRUNCATES --转载
GETTRUNCATES | IGNORETRUNCATESValid ForExtract and ReplicatDescriptionUse the GETTRUNCATESand IGNORE ...