编程题--Mystring类的编写

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:54   3080   0

对于下面的类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;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP