在 c++ 中使用深度复制的运算符重载
Operator overloading using deep copy in c++
#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++
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 强制复制分配超过移动分配运算符
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 编译器调用复制运算符而不是移动运算符
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 在 c++ 中使用深度复制的运算符重载
- 使用赋值运算符复制 std::vector
- 为什么基类中的复制和交换会导致派生类中的复制赋值运算符被隐式删除?
- 如果我也使用复制构造函数并且重载 = 运算符,我是否需要析构函数?
- 冲突的 CLANG"虚拟 dtor"和"已弃用的复制运算符"警告
- 使用复制运算符作为赋值运算符
- 不能分配 X 类型的对象,因为它的复制运算符隐式删除
- 为什么在具有引用字段的类中隐式删除复制运算符
- std::函数复制运算符 (MSVC2012) 的奇怪行为
- 用向量替换类新的[]变量-移动、复制运算符
- unique_ptr返回和复制运算符
- 复制运算符为的构造函数
- 如果 std::move 用作 &&&参数的参数,它是否会调用复制运算符?