知方号

知方号

0

01 赋值运算符重载的需求

有时候希望赋值运算符两边的类型可以不匹配,比如:把一个 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。