1.有时候希望赋值运算符两边的类型可以不匹配,比如,把一个int类型变量赋值给一个complex对象,或者把一个char*类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符=。
赋值运算符“=”只能重载为成员函数。
class string
{
private:
char *string;
public:
string():str(new char[1]){str[0]=0;};
const char *c_str() {return str;};
string &operator = (const char *s);
~string(){delete []str;};
};
string & string::operator = (const char *s)
{
delete []str;
str=new char[strlen(s)+1];
strcpy(str,s);
return *this;
}/*思考如果string S1=S2;会怎么样呢?会造成什么错误呢?这里使用复制构造函数初始化,所以需要写一个复制构造函数。如果没有写,就是一个浅拷贝*/
int main()
{
string s;
s="good luck"; //等价于s。operator=("good luch");
cout<<s.c_str()<<endl;
//string s2="hello"; //如果没有注释掉就是错误的。因为这里是复制构造函数初始化的。
s="shenzhou 7";
cout << s.c_str()<<endl;
}