浅谈c++构造函数问题,初始化和赋值问题
默认构造函数(就是没有参数的构造函数) The Default Constructor 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: 有一点注意的时候两者不能同时使用: 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++构造函数问题,初始化和赋值问题全部内容了,希望大家多多支持编程小技巧~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |