码迷,mamicode.com
首页 > 其他好文 > 详细

运算符重载(=和+)

时间:2015-04-26 18:20:02      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

#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:

技术分享

运算符重载(=和+)

标签:

原文地址:http://www.cnblogs.com/audi-car/p/4458054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!