zoukankan      html  css  js  c++  java
  • 重载赋值运算符

    应当注意以下几点:

    1.是否将返回值类型声明为该类型的引用,否则无法做连续赋值

    2.是否将传入的参数声明为常量引用,如果不是常量,不能保证不会修改传入的参数,如果不是引用,会调用一次拷贝构造函数影响代码的效率。

    3.是否判断赋值的两个操作数是同一个实例

    4.是否删除被赋值对象的内存,否则会产生内存泄露

    程序代码如下:

    #include<iostream>
    #include<cstring>
    using namespace std;
    class Mystring
    {
    public:
        Mystring &operator=(const Mystring &str);
        Mystring(char *pdata=NULL)//带默认值的构造函数
        {
            data=pdata;
        }
        Mystring(const Mystring &str)//拷贝构造函数
        {
            data=str.data;
        }
        ~Mystring() //析构函数
        {
        }
        void show()
        {
            cout<<data<<endl;
        }
    private:
        char* data;
    };
    Mystring &Mystring::operator=(const Mystring &str)
    {
        if(&str!=this)//如果&str==this则不必赋值
        {
            delete data;//先释放原有空间
            data=NULL;
            data=new char[strlen(str.data)+1];//为指针初始化空间
            strcpy(data,str.data);//赋值
    
        }
        return *this;
    }
    int main()
    {
        Mystring str1("hello"),str2;//声明两个类对象
        str1.show();
        str2=str1;//调用自定义赋值方法
        str2.show();
        str1=str1;//自己给自己赋值
        str1.show();
        return 0;
    }
  • 相关阅读:
    python- 冒泡算法
    python-文件读写资料整理
    Python学习之edx6001-week4
    Python学习之自动化开发-DAY1作业-三级菜单
    python学习之自动化开发-DAY1作业-登陆程序
    python 学习之edx6001-week4
    elasticsearch RESTfull _cat api
    python
    python
    python 文件操作
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4469683.html
Copyright © 2011-2022 走看看