C++规定,"="只能重载为成员函数。
赋值运算符"=“要求左右两个操作数的类型是匹配的,或者至少是兼容的,如果希望”=“两边的操作数的类型即使不兼容也能够成立,就需要对”="进行重载。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class String
{
private:
char *str;
public:
String() : str(NULL) {}
const char *c_str() const { return str; };
String &operator=(const char *s);
~String();
};
String &String::operator=(const char *s)
{
if (str)
delete[] str;
if (s)
{
str = new char[strlen(s) + 1];
strcpy(str, s);
}
else
str = NULL;
return *this;
}
String::~String()
{
if (str)
delete[] str;
}
int main()
{
String s;
s = "Good Luck,";
cout << s.c_str() << endl;
s = "Shenzhou 8!";
cout << s.c_str() << endl;
return 0;
}