赋值运算符 ‘=’重载
有时候希望赋值运算符两边的类型可以不匹配,比如,把一个int类型变量赋值给一个Complex对象,或把一个 char * 类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符“=”。
注意: 赋值运算符“=”只能重载为成员函数(需要特别记忆)
下面给出相关代码进行理解:
#include<iostream>
#include<string.h>
using namespace std;
class String {
private:
char * str;
public:
String ():str(NULL) { }
const char * c_str() { return str; };
String & operator = (const char * s);
~String( );
};
String & String::operator = (const char * s)
{ //重载“=”以使得 obj = “hello”能够成立
if( str)
delete [] str;
if(s) { //s不为NULL才会执行拷贝
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," ; //等价于 s.operator=("Good Luck,");
cout << s.c_str() << endl;
// String s2 = "hello!"; //这条语句要是不注释掉就会出错
s = "Shenzhou 8!"; //等价于 s.operator=("Shenzhou 8!");
cout << s.c_str() << endl;
return 0;
}
String s2 = "hello!"; //这条语句要是不注释掉就会出错
这个要特别注意,因为hello和String不匹配。