gpt4 book ai didi

c++ - 在 C++ 中使用深拷贝的运算符重载

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:12 25 4
gpt4 key购买 nike

#include<iostream>
#include<cstring>
#include<conio.h>
using namespace std;
class String
{
char *value;
int len;

public:
String()
{
len=0;
value=0;
}
~String() {}

String(char *s)
{
len=strlen(s);
value=new char[len+1];
strcpy(value,s);

}
String(String & s)
{
len=s.len;
value=new char[len+1];
strcpy(value,s.value);
}


friend String operator+(String obj1, String obj2)
{
String obj3;
obj3.len=obj1.len+obj2.len;
obj3.value=new char [obj3.len+1];

strcpy(obj3.value,obj1.value);
strcat(obj3.value,obj2.value);
return obj3;
}

friend String operator=(String obj1, String obj2)
{

String obj3;
strcpy(obj3.value,obj1.value);
strcat(obj3.value,obj2.value);
return obj3;
}


void display()

{ cout<<value<<endl; }

};


int main()
{

String s1("Bodacious ");
String s2("AllienBrain");
String s3;
s3=s1+s2;
s3.display();

getch();
}

因为我已经在我的代码中操作了运算符 + 但我也想重载 operator= 来连接两个字符串但是当我重载 + 运算符时这段代码没有显示错误但是它显示正确的输出即 Bodacious AllienBrain。

但是当我重载 operator= 时它会抛出错误,所以有人告诉我我出了什么问题吗?

最佳答案

更合适的重载 = 运算符版本如下:

class String 
{
///...
String& operator=(const String& obj2)
{
if(this->value ){
delete this->value; // Free if existing
this->value = NULL;
}
len = obj2.len;
this->value = new char[len + 1];

strcpy(this->value, obj2.value);
return *this;
}
///
};

关于c++ - 在 C++ 中使用深拷贝的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com