1、运算符重载#include#includeFunnyString.husing std:istream; using std:ostream; using std:string; using std:cout; using std:cin;using std:endl;int main()FunnyString string1,string2; coutstring1;coutstring2; cout未进行s1-=s2运算时的s1 * s2 is string1*string2; coutns1 + s2 is string1+string2;coutns1 - s2 is string1-
2、string2;coutns1+= s2 is (string1+=string2);coutns1 -= s2 is (string1-=string2);/老师,题目中写道:s1+= s2 is abcabf s1 -= s2 is c s1 * s2 is adbacbdf coutn进行s1-=s2运算后的s1 * s2 is string1*string2n; /但是-=后s1的只有一个c了,乘以s2后是不是应为cdabf。return 0;#include using std:istream; using std:ostream; using std:string; using s
3、td:cout; using std:cin;using std:endl;#includeFunnyString.hvoid FunnyString:setFunnyString( const char * a) sPtr=new char length+1;if ( a!=0)strcpy(sPtr,a);elsesPtr0=0;FunnyString:FunnyString( const char *first):length(first!=0)?strlen(first):0)setFunnyString(first);FunnyString:FunnyString( const Fu
4、nnyString &a)length=a.length;sPtr=new charlength+1;for(int i=0;ilength;i+)sPtri=a.sPtri;int FunnyString:getLength() constreturn length;FunnyString:FunnyString()delete sPtr; ostream &operator( ostream &output, const FunnyString &a ) for (int i=0;ia.length;i+) output( istream &input, FunnyString &a) c
5、har b100; inputb; a.length=strlen(b); delete a.sPtr; a.sPtr=new char a.length+1; for (int i=0;istrlen(b);i+) a.sPtri=bi; return input; const FunnyString &FunnyString:operator= (const FunnyString &a) if (&a != this) delete sPtr; length=a.length; setFunnyString(a.sPtr); return *this; else return *this
6、; const FunnyString &FunnyString:operator+=( const FunnyString &a ) FunnyString c;c=*this+a;*this=c;return *this; const FunnyString &FunnyString:operator-=( const FunnyString &a ) FunnyString c;c=*this-a;*this=c;return *this; const FunnyString operator+(const FunnyString &left,const FunnyString &rig
7、ht) int len=left.length+right.length; char *a=new char len+1; a1=left.sPtr1; for (int i=0;ileft.length;i+) ai=left.sPtri; len=left.length; int j; for ( j=0;jright.length;j+) if(len!=0) if (left.sPtrlen-1=right.sPtrj) len-; else j+; break; else j+; break; j-; if (jright.length-1) for (;jright.length;
8、j+) len+; alen-1=right.sPtrj; alen=0; FunnyString c(a); delete a; return c; const FunnyString operator-(const FunnyString &left,const FunnyString &right) char *a=new char left.length+1; int len=left.length; for (int i=0;ileft.length;i+) ai=left.sPtri; for (int j=0;jright.length;j+) for (int p=0;plef
9、t.length;p+) if (ap=right.sPtrj) ap=0; for (int s=0;sleft.length;s+) if (as=0) int q=s; for(;qleft.length;q+) aq=aq+1; len-; s-; alen=0; FunnyString c(a); delete a; return c; const FunnyString operator*(const FunnyString &left,const FunnyString &right)char *a=new char left.length+right.length+1;int
10、min;if (left.lengthright.length)min=left.length;elsemin=right.length;for (int i=0;imin;i+)a2*i=left.sPtri;a2*i+1=right.sPtri;if (left.lengthright.length)for (int j=min;jright.length;j+)amin+j=right.sPtrj;elsefor (int j=min;jleft.length;j+)amin+j=left.sPtrj;aleft.length+right.length=0;FunnyString c(a
11、);delete a;return c;#ifndef FUNNYSTRING_H#define FUNNYSTRING_H#include #includeusing std:istream; using std:ostream; using std:string; using std:cout; using std:cin;using std:endl;class FunnyString friend ostream &operator( istream &, FunnyString &); friend const FunnyString operator+(const FunnyStr
12、ing &,const FunnyString &); friend const FunnyString operator-(const FunnyString &,const FunnyString &); friend const FunnyString operator*(const FunnyString &,const FunnyString &); public: FunnyString( const char * = ); FunnyString( const FunnyString & ); FunnyString(); const FunnyString &operator+=( const FunnyString & ); const FunnyString &operator-=( const FunnyString & ); const FunnyString &operator=(const FunnyString &); int getLength() const; private: int length; char *sPtr; void setFunnyString( const char * ); ;#endif