您当前的位置: 首页 >  c++

小林coding

暂无认证

  • 1浏览

    0关注

    167博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ 赋值运算符‘=‘的重载(浅拷贝、深拷贝)

小林coding 发布时间:2019-12-01 21:43:15 ,浏览量:1

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的目的是存放\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             
关注
打赏
1659932071
查看更多评论
0.0447s