有时候希望赋值运算符两边的类型可以不匹配,比如:把一个 int 类型变量赋值给一个Complex(复数)对象,或把一个 char* 类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符‘=’。
需要注意的是:赋值运算符 = 只能重载为成员函数。
02 赋值运算符重载的例子下面我们以自定义一个自己的字符串类代码的例子,讲解赋值运算符的重载函数。
class MyString // 字符串类{public: // 构造函数,默认初始化1个字节的字符 MyString ():m_str(new char[1]) { m_str[0] = 0; } // 析构函数,释放资源 ~MyString() { delete [] m_str; } const char* c_str() { return m_str; } // 赋值运算符重载函数 // 重载=号使得 obj = "Hello" 能够成立 MyString & operator= (const char *s) { // 释放旧字符串资源 delete [] m_str; // 生成新字符串的空间大小,长度多+1的目的是存放 m_str = new char[strlen(s) +1 ]; // 拷贝新字符串的内容 strcpy(m_str, s); // 返回该对象 return *this; } private: char * m_str; // 字符串指针};int main() { MyString s; s = "Hello~"; // 等价于s.operator=("Hello~"); std::cout