对于下面的类Mystring,要求重载运算符后可以计算表达式 a=b+c(a,b,c都是类Mystring的对象),请重载相应的运算符并别写程序测试
// 运算符重载.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Mystring
{
public:
Mystring(char *s){
str=new char[strlen(s)+1];
strcpy(str,s);
}
~Mystring(){
delete [] str;
}
//重载"="运算符
Mystring & operator =(const Mystring & mystr){
if (this==&mystr) //检查自我赋值
{
return *this;
}
if(str!=NULL)
delete [] str;
str= new char[strlen(mystr.str)+1];
strcpy(str,mystr.str);
return *this;
}
/*
//重载"+"运算符(不改变被加对象)
Mystring &operator +(const Mystring &mystr){
Mystring *temp=new Mystring("");
temp->str=new char[strlen(str)+strlen(mystr.str)+1];
strcpy(temp->str,str);
strcat(temp->str,mystr.str);
return *temp;
}
*/
/*
//重载"+"运算符(改变被加对象)
Mystring &operator +(Mystring &mystr){
char *temp=str;
str=new char[strlen(temp)+strlen(mystr.str)+1];
strcpy(str,temp);
strcat(str,mystr.str);
delete [] temp;
return *this;
}
*/
//重载为友元函数
friend Mystring& operator +(const Mystring& mystr1,const Mystring &mystr2);
//重载"+"运算符(不改变被加对象)
void display(){
cout<<str<<endl;
}
protected:
//private:
public:
char *str;
};
Mystring& operator +(const Mystring& mystr1,const Mystring &mystr2){
Mystring *temp=new Mystring("");
temp->str=new char[strlen(mystr1.str)+strlen(mystr2.str)+1];
strcpy(temp->str,mystr1.str);
strcat(temp->str,mystr2.str);
return *temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
Mystring str1("hello,");
Mystring str2("world!");
Mystring str3("");
str3=str3+str1;
str3.display();
str3=str3+str2;
str3.display();
str3=str1+str2;
str1.display();
str3.display();
getchar();
return 0;
}
|