求C++大神:写了复制构造函数还要不要重载赋值运算符?谢谢~

因为在初始化对象时会调用复制构造函数,那么为什么还要重载 = 呢?

第1个回答  2014-09-21
顾名思义,复制构造函数是构造函数,所以它必须用来构造对象,同时用一个已经创建好的对象来初始化它。而赋值运算符则是在对象建好之后复制一个对象的状态到另一个对象中,这里两个对象都必须在赋值之前创建完毕。比如:
class A{...};
int main() {
A a, c;
A b(a); //copy constructor,创建b时用a的状态来初始化它
c = b; //b、c之前都已经创建好,现在把b的数据复制到c中去(重载赋值运算符)。
...
}本回答被提问者和网友采纳

拷贝构造函数```求助`~~~
描述拷贝构造函数和赋值运算符的异同的参考资料有很多。 拷贝构造函数不可以改变它所引用的对象,其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝...

C++拷贝构造函数 参数类型为什么是引用类型
而非对象11\/*5*\/CExample& operator = (const CExample &ex) \/\/赋值函数(赋值运算符重载)使用引用相对于一般的变量参数,减少了一次内存拷贝 使用const 是限定参数对象是只读的,避免犯错,建议加上const 拷贝构造函数涉及到 深拷贝 和 浅拷贝 当拷贝构造不是引用而是直接对象时,根据拷贝构造的调...

c++语言赋值运算符和复制表达式,及其复合的复值运算符
复合赋值运算符:比如s+=1;意思是用s自身加1然后把新值赋值给s,如果s的值是0的话,那么s+=1;的结果s就成1了,你可以把它展开,s+=1可以看成s=s+1;

关于C++重载运算符
① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。运算符重载可以使用成员函数和...

C++结构体的构造函数和重载小于号应该怎么理解
2.比如这里的node(const int a=0,const int g= 0):a(a)g(g){} 这个构造函数,就告诉了计算机,你可以这样创建 : node tmp(1,2);3.关于运算符重载,因为这个node类型是你自己定义的,计算机并不知道<是根据什么来比较大小的,如果你要这样用 node a,b;a<b;就得让计算机知道当 <左右...

C++中的拷贝赋值运算符(copy assignment operator)
拷贝赋值运算符是C++中用于复制类对象内容的非模板非静态成员函数,其函数名是operator=。该运算符能够接收相同类类型的参数并实现复制功能。参数类型包括五种形式:T、T&、const T&、volatile T&、const volatile T&。这五种形式并非完全独立,其中后四种形式可以同时定义。然而,第一种形式的参数类型T...

C++中,拷贝构造函数,和构造函数有什么区别?
构造函数:是用于对对象初始化名字,必须与类的名字相同,比如说定义一个圆类。复制构造函数,在某种意义上相当于运算符“=”重载,把一个对象的数值复制给另一个 class circle { public:circle (int r):radium(r){};\/\/构造函数的第一种写法 circle (int r){radium=r;}\/\/构造函数的第二种写法...

C++中运算符重载用得多吗
挺多的,几乎任何C++标准类都用到了运算符重载 所以写高重用性与基础类一般用的多,不过如果程序员代码质量不高,就不用为好了,用了反而写得一团糟

关于重载的问题,请运行试试,关于内存方面的错误#include<iostream>...
有两个问题:析构函数不需要delete,没有用new新建;构造函数:String::String(char *str){ m_data=str;}如果为空的话,复制将不成功。

在c++中对于常成员函数,下面描述正确的是( )。
当然是实现对象的复制,如果可以有a=b(当然这个可以在后面用重载运算符号做到,但毕竟对象不是普通变量)用于对象赋值,可能就没有拷贝构造函数这一概念了,拷贝构造函数并不是非要有不可(本来有默认的),你这个程序有和没有,区别不大,为什么要写拷贝构造函数,这个问题比较好,建意你查下资料,弄...

相似回答