01 赋值运算符重载的需求
有时候希望赋值运算符两边的类型可以不匹配,比如:把一个 int 类型变量赋值给一个Complex(复数)对象,或把一个 char* 类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符‘=’。
需要注意的是:赋值运算符 =
只能重载为成员函数。
下面我们以自定义一个自己的字符串类代码的例子,讲解赋值运算符的重载函数。
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的目的是存放\0
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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?