#include <iostream>
#include <string.h>
using namespace std;
class String
{
private:
enum { SZ=80 };
char str[SZ];
public:
String(){
strcpy(str, "");
}
String (const char s[]){
strcpy(str,s);
}
String operator = (String obj){
String newObj;
strcpy(newObj.str,obj.str);
return newObj;
}
void display(){
cout << str;
}
};
int main()
{
String s1("ABC");
String s3;
s3 = s1;
s3.display();
return 0;
}
我正在尝试使用上面的代码(赋值运算符)operator=
将一个Char字符串对象复制到第二个,为什么它不起作用?我尽我所能但仍然失败了。
答案 0 :(得分:0)
您的赋值运算符不是分配给String本身,而是分配给临时var。这将是正确的方法:
String& operator = (const String& obj) {
strcpy(str, obj.str); // in this line, obj is copied to THIS object
return *this; // and a reference to THIS object is returned
}
赋值运算符总是必须更改要分配内容的对象本身。通常还会返回对对象本身的引用。
您的代码中还存在其他一些问题:
不应该使用strcpy(),因为它没有范围检查(缓冲区的大小),虽然不安全。
当使用字符串作为参数(或任何更大的对象,如具有大量成员,向量等的类)时,您应该使用像我的示例中的const引用(&#34; const&#34;和&#34 ;&安培;&#34)。这样更安全(因为你不能无意中更改参数的内容)和更快,因为只需要复制(非常小的)引用,而不是参数的全部内容。