#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

class MyString
{
private:
    char *str;
public:
    MyString(char *s)
    {
        str=new char[strlen(s)+1];
        strcpy(str,s);
    }
    ~MyString()
    {
        delete []str;
    }

    MyString & operator =(MyString &string)
    {
        if (this==&string)
        {
            return *this;
        }
        if (str!=NULL)
        {
            delete []str;
        }
        str=new char[strlen(string.str)+1];
        strcpy(str,string.str);
        return *this;
    }

    //method1  改变被加对象  如下面main函数中的mystring1对象
    //原理类似于浅复制
    /*MyString & operator +(MyString &string)
    {
        char *temp=str;
        str=new char[strlen(str)+strlen(string.str)+1];
        strcpy(str,temp);
        strcat(str,string.str);
        return *this;
    }*/

    //method2  不改变被加对象  如下面main函数中的mystring1对象
    //原理类似于深复制
    MyString & operator +(MyString &string)
    {
        MyString *pString=new MyString("");
        pString->str=new char[strlen(str)+strlen(string.str)+1];
        //char *temp=new char[strlen(str)+strlen(string.str)+1];
        strcpy(pString->str,str);
        strcat(pString->str,string.str);
        return *pString;
    }

    void print()
    {
        cout<<str<<endl;
    }
};

int main()
{
    MyString mystring1("hello");
    MyString mystring2(" world");
    MyString mystring3("");
    mystring3=mystring1+mystring2;
    mystring1.print();
    mystring3.print();
    return 0;
}

注意文中的方法一和方法二,两种方式对于被加对象的影响是不一样的。

运行结果如下:

method1:

运算符重载(=和+)

 

method2:

运算符重载(=和+)

相关文章:

  • 2022-12-23
  • 2022-01-09
  • 2021-09-28
  • 2021-11-17
  • 2021-10-07
  • 2021-07-12
  • 2021-10-29
  • 2021-07-22
猜你喜欢
  • 2021-05-31
  • 2022-01-10
  • 2021-06-12
  • 2021-05-07
  • 2021-12-02
  • 2022-01-19
  • 2022-12-23
相关资源
相似解决方案