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