C++中构造函数创建对象
来源:互联网 发布:无法登录战网检查网络 编辑:程序博客网 时间:2024/06/05 06:12
1、 C++中构造函数的调用方式主要分为两类:
1)显示调用:
eg: Stock food = Stock("360",250,2.5);
2)隐式调用;
eg:Stock food("360",250,2.5);
注意:显示调用构造函数大多编译器理解为对food进行初始化,这也是最正确的理解方式,因此直道food所在的作用域到达尽头,才调用析构函数进行清理;而有的编译器将Stock food = Stock("360",250,2.5;理解为:先创建一临时对象,然后将其赋值给food,然后在删除临时对象。如果是这样,则会调用一次析构函数,对对象进行清理。这种创建方式和 food = Stock("360",250,2.5比较相似,即对food进行复位。
C++11新标准,增添了对象的列表初始化:
eg:Stock food = {"360",250,2.5};
eg:Stock food {"360",250,2.5};
2、 默认构造函数:
默认构造函数分为三类:
1)声明类时,程序员不声明任何构造函数,则编译器为该类增添一不含任何参数的构造函数,该构造函数也不对该类的任何成员变量进行初始化,即:成员变量的值未被初始化。
2) 声明类时,程序员声明一个不含参数的构造函数,该构造函数可以对类成员变量进行默认初始化;
3)声明类时,程序员声明一个含默认参数的构造函数,那么定义对象时成员变量将被默认参数初始化;
注意:只有在程序员不声明任何构造函数的情况下,编译器才会为类增添一个不含任何参数的默认构造函数,如果程序员偷懒,定义对象时:Stock food;则编译器将报错,因此为了编译成功,程序员最好为类增添一个隐式初始化的默认构造函数。若添加两个默认构造函数,则在调用默认构造函数初始化对象时会出错,编译器不知道调用哪一个。
3、默认构造函数的调用:
eg: Stack food;
eg: Stack food();//典型错误方法
eg:Stack food = Stack();
默认构造函数写法最简单,因此程序员最好为类增添一个默认构造函数啊!
4、复制构造函数
当时用一个对象类初始化另一个对象时,编译器将自动生成复制构造函数。该函数将生成一个副本对象,并将该副本对象中的非静态数据成员拷贝给要初始化的对象,因此,忽视了对静态成员的处理,容易引发难以检查的错误。
eg: Stock food = Stock("360",250,2.5);
将调用复制构造函数,对food进行复制初始化。
- js中通过构造函数创建对象
- C++中构造函数创建对象
- js 中创建对象 构造函数 this
- 创建对象--构造函数
- 创建对象中构造函数和析构函数
- C#构造函数-创建对象
- C#构造函数-创建对象
- JavaScript构造函数创建对象
- 构造函数与创建对象
- JavaScript 创建对象 构造函数
- js中构造函数创建对象加不加new的问题
- js中构造函数创建对象加不加new的问题
- JS中使用动态原型模式、寄生构造函数模式、稳妥构造函数模式创建对象
- Java中,关于在子类构造函数中调用父类构造函数完成对象创建的简单分析
- JS中定义对象方式三: 使用构造函数方式创建对象
- 构造函数方法创建Mat对象
- JS原型+构造函数创建对象
- 创建对象之构造函数模式
- POJ 3177Redundant Paths 边双连通分量
- 堆排序
- STL算法_sort算法篇
- Unicode,ASCII,UTF-8,GBK
- CSS让元素居中布局
- C++中构造函数创建对象
- Lambda初步
- <LeetCode OJ> 160. Intersection of Two Linked Lists
- Java中的常量和进制问题
- 码农小汪-SpringMVC -Controller 接口控制器详解1
- Floyed算法学习
- Android面试题——ListView(二)
- Cocos2dx在Android Studio中报java.lang.UnsatisfiedLinkError的解决办法
- 迟来的4月小结