Char字符串的赋值运算符

时间:2015-05-30 19:28:10

标签: c++ char variable-assignment operator-keyword

#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字符串对象复制到第二个,为什么它不起作用?我尽我所能但仍然失败了。

1 个答案:

答案 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)。这样更安全(因为你不能无意中更改参数的内容)和更快,因为只需要复制(非常小的)引用,而不是参数的全部内容。