c++运算符重载,请问重载=为什么要加复制构造函数,我觉得好像没意义,但是删除运行确有乱码,求大神解释

#include<iostream>usingnamespacestd;classString{private://数据成员char*strValue;//串值publi... #include<iostream>
using namespace std;
class String
{
private:
// 数据成员
char *strValue; // 串值
public:
// 公有成员
String(char *s = "") // 构造函数
{
if (s == NULL) s = ""; // 将空指针转化为空串
strValue = new char[strlen(s) + 1];// 分配存储空间
strcpy(strValue, s); // 复制串值
}
String(const String ©) // 复制构造函数
{ strValue = new char[strlen(copy.strValue) + 1];// 分配空间
strcpy(strValue, copy.strValue); // 复制串值
}
String operator=(const String ©); // 重载赋值运算符
~String() { delete []strValue; } // 析构函数
void Show() const { cout << strValue << endl; } // 显示串
};
String String::operator=(const String ©) // 重载赋值运算符
{
if (this != ©)
{ // 目的对象与源对象不是同一个对象
strValue = new char[strlen(copy.strValue) + 1];// 分配空间
strcpy(strValue, copy.strValue);// 复制串值
}
return *this; // 返回目的对象
}
int main() // 主函数main()
{
String s1("try"), s2; // 定义对象
s2 = s1; // 使用重载赋值运算符
s1.Show(); // 显示串s1
s2.Show(); // 显示串s2
system("PAUSE"); // 输出系统提示信息
return 0; // 返回值0, 返回操作系统
}
展开
 我来答
百度网友1d1d26d
2013-05-26 · TA获得超过592个赞
知道小有建树答主
回答量:299
采纳率:50%
帮助的人:131万
展开全部
S1.Show 和 S1.Show 调用了 类成员strValue ,系统会调用复制构造函数,把类复制过去。
有点像普通函数的调用,系统是把参数值复制传递进去的。

基本上,重载赋值运算符、复制构造函数、析构函数 这三个 骨肉相连。动一个 其他的也得动。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式