浅谈c++构造函数问题,初始化和赋值问题
默认构造函数(就是没有参数的构造函数)
The Default Constructor
The default constructor is the constructor used to create an object when you don't provide explicit initialization values. That is, it's the constructor used for declarations like this:
Stock stock1; // uses the default constructor
1、由编译器自动生成
2、由我们自己定义的
这里又有两种情况
上面说了啊,default constructor有两种(……your own default constructor. This is a constructor that takes no arguments):
1)One is to provide default values for all the arguments to the existing constructor:
Stock(const char * co = "Error", int n = 0, double pr = 0.0);
2)The second is to use function overloading to define a second constructor, one that has no arguments:
Stock();
有一点注意的时候两者不能同时使用:
You can have only one default constructor, so be sure that you don't do both. (With early versions of C++, you could use only the second method for creating a default constructor.)
This is a constructor that takes no arguments:这个指的是调用的时候不带参数。
编译器自动添加默认构造函数的条件:编译器实现的构造函数其实就是什么都不做
1.没有任何自己定义的构造函数(即便是复制构造函数也不行,如果自己定义复制构造函数,则必须自己定义构造函数)
2、数据成员中没有const和reference。--因为要初始化。
拷贝构造函数的参数必须是引用的原因:拷贝构造函数的参数使用引用类型不是为了减少一次内存拷贝, 而是避免拷贝构造函数无限制的递归下去。
如果是值的话,那在传值的时候还要再调一次拷贝构造函数
然后又要传值,又要再调一次....
然后你就内存不够,当了
关于赋值==函数和拷贝构造函数的区别:
#include<iostream> using namespace std; class A { public: int i; A( const A& a) { i=a.i; cout<<"copy is build"<<endl; } explicit A(int y) { i=y; } }; A fun(A i) { A a1(i); A a2=a1;//其实就调用拷贝构造函数 return a2; } int main() { A a(1); fun(a); }
拷贝构造函数一共调用四次拷贝构造函数。。fun参数传值一次,a1(i)一次,a2(a1)一次,return的时候构造临时对象一次
如果函数返回对象,而不是指针,那么在执行return的时候,会使用被return的对象“复制构造”临时对象,然后,return语句执行完毕(遇到分号;了)函数内部创建的全部变量析构、出栈。而被“赋值构造”的临时对象则在调用该函数的语句执行完毕(遇到分号;或者右边的大括号})后,析构。
总结一句:
临时变量的生存范围是语句级――分号;结束或者右边的大括号}结束。语句结束之后,临时变量就被析构了~
以上就是小编为大家带来的浅谈c++构造函数问题,初始化和赋值问题全部内容了,希望大家多多支持脚本之家~
您可能感兴趣的文章:
- python 变量赋值,引用,初始化问题
- c++构造函数问题,初始化和赋值问题
- 关于struct 变量初始化和赋值的问题(vs 环境)
- 解决C++全局变量只能初始化不能赋值的问题
- vue 中data初始化变量赋值null或{}的问题
- python多维数组初始化后赋值的问题
- Java集合初始化赋值等相关问题
- 关于全局变量初始化与赋值问题的思考
- 今天开发中遇到的一个关于初始化赋值问题
- 关于C/C++中switch语句case中变量不能初始化赋值的问题
- js中获取当前页面高度,iframe高度赋值问题,body高度初始化赋值
- 类成员中冒号初始化与花括号类赋值问题(未经应许,所以发网站收藏)
- C语言指针问题,初始化,赋值,以及字符数组,字符串常量等问题
- 初始化和赋值的一些问题
- 电子商城 批量删除 商品时,dao操作遇到 二维数组 元素赋值问题。【加深 二维数组初始化的理解】
- 数组初始化与赋值注意的问题
- ios关于viewController初始化赋值的问题,VC调用问题
- List初始化赋值问题
- python 变量赋值,引用,初始化问题
- ORA-06531: 引用未初始化的收集 的问题解决