CTypeA(const CTypeB& b)
CTypeA& operator=(const CTypeB& b)
一直没弄懂这两个有什么区别。
只知道,重载了=号,下面复制的时候就不调用拷贝构造函数了。
CTypeA& operator=(const CTypeB& b)
一直没弄懂这两个有什么区别。
只知道,重载了=号,下面复制的时候就不调用拷贝构造函数了。
CTypeA a1; CTypeB b1; a1 = b1;
那什么时候会有区别?
class CTypeB { public: int b; }; class CTypeA { public: int a; CTypeA(){} CTypeA(const CTypeB& b) :a(b.b) { } CTypeA& operator=(const CTypeB& b) { a = b.b; return *this; } operator CTypeB() { CTypeB b; b.b = a; return *this; } };
解决方案
10
区别在于拷贝构造,主要用于以一个对象为模板,构造新对象,对象本身在这之前,是不存在的
operator= 主要是另外一个对象的内容,填充本对象
这个本对象,是已经构造好的现成对象。
operator= 主要是另外一个对象的内容,填充本对象
这个本对象,是已经构造好的现成对象。
30
首先要说明的是,若用户没有定义,C++隐式声明一个复制构造函数和一个赋值运算符(完成按数据成员复制的动作)。二者很像,但是在下边这点上有很大的不同:
复制构造函数是只在对象实例化时才会被调用,也就是说,在复制构造函数调用期间,这个对象处于一个未决状态(直到复制构造函数被成功调用),另外复制构造函数不返回任何值,void都没有。
拷贝构造函数应用的场合由以下几个方面:
1 函数的参数是一个对象,并且是值传递方式
2 函数的返回值是一个对象,并且是值传递方式
3 用一个对象初始化另外一个对象
赋值运算符则在一个现存的对象被赋予新的值时被调用,并且它有返回值。
http://blog.csdn.net/swgsunhj/article/details/37871249
复制构造函数是只在对象实例化时才会被调用,也就是说,在复制构造函数调用期间,这个对象处于一个未决状态(直到复制构造函数被成功调用),另外复制构造函数不返回任何值,void都没有。
拷贝构造函数应用的场合由以下几个方面:
1 函数的参数是一个对象,并且是值传递方式
2 函数的返回值是一个对象,并且是值传递方式
3 用一个对象初始化另外一个对象
赋值运算符则在一个现存的对象被赋予新的值时被调用,并且它有返回值。
http://blog.csdn.net/swgsunhj/article/details/37871249
30
正所谓其名,拷贝构造函数是在构造对象的时候用,而等号重载则在在赋值的时候用
CTypeA a;
CTypeA b(a); //在构造b
CTypeA b = a; //在构造b
b = a; //在赋值
CTypeA a;
CTypeA b(a); //在构造b
CTypeA b = a; //在构造b
b = a; //在赋值
20
A a2 = a1;//这个,会根据类的实现,采用不同的方案,可能会调用拷贝构造函数,也可能先构造,后调用operator =
A a2(a1);//这个直接调用构造函数初始化
本人记着是这样的
A a2(a1);//这个直接调用构造函数初始化
本人记着是这样的