string类中“+”操作符重载(三种形式)

原创 2017年03月29日 20:53:55
class MyString
{
public:
MyString(char *s)                      //有参构造函数;
{
str=new char[strlen(s)+1];
strcpy(str,s);
}

~MyString()                              //析构函数;
{
delete []str;
str==nullptr;
}

MyString (const MyString &strOther)        //复制构造函数;
{
str=new char[strlen(strOther.str)+1];
strcpy(str,strOther.str);
}

MyString & operator=(MyString &strOther)     //赋值函数(“=”重载)
{
if(this==&strOther)
return *this;
if(str!=nullptr)
delete [] str;
str=new char[strlen(strOther.str)+1];
strcpy(str,strOther.str);
return *this;
}

MyString & operator+(MyString &strOther)       //"+"重载(改变被加对象)             
{
char *temp=str;                             
str=new char[strlen(temp)+strlen(strOther.str)+1];
strcpy(str,temp);  //复制第一个字符串;                      
delete[] temp;
strcat(str,strOther.str); //连接第二个字符串;
return *this;             //返回改变后的对象;
}

MyString & operator+(MyString &strOther)            //"+"重载(不改变被加对象)
{
MyString *pString=new MyString("");            //堆内存中构造对象;
pString->str=new char[strlen(str)+strlen(strOther.str)+1];
strcpy(pString->str,str); //复制第一个字符串;
strcat(pString->str,strOther.str);//连接第二个字符串;
return *pString;             //返回堆中对象;

}

private:
char *str;
};



//MyString类的友元,要求str成员是public访问权限; //"+"重载(不改变被加对象)

MyString & operator(MyString &left,MyString &right)
{
MyString *pString=new MyString("");
pString->str=new char[strlen(left.str)+strlen(right.str)+1];
strcpy(pString->str,left.str);
strcat(pString->str,right.str);
return *pString;
}




//三个"+"操作符重载函数均是调用strcpy复制第一个字符串,调用strcat连接第二个字符串;

1、第一个返回*this对象,它改变了被加对象;属于类的成员函数;
2、第二个返回堆中构造的对象,它没有改变被加对象;属于类的成员函数;

3、第三个都返回堆中构造的对象,它没有改变被加对象;属于友元函数(前提是
    需要str成员的访问权限改为public,因为友元函数不能访问类的私有成员,且友元函数没有this指针) 

c++string类的操作符重载

首先 先了解  class 类里面给我们 默认重载了6个函数  分别是 默认构造 默认析够 默认赋值 拷贝构造 重载* 重载& 然而我们需要关注的是  拷贝构造         因为如果...
  • w739639550
  • w739639550
  • 2017年01月11日 15:27
  • 391

【C++】String类中的运算符重载

模块化设计: 头文件: #ifndef operator_operator_h #define operator_operator_h #include #include ...
  • Irean_Lau
  • Irean_Lau
  • 2015年06月07日 14:29
  • 6131

设计String类,并且在String类中使用运算符重载

程序代码: #include #include using namespace std; class String//定义String类 { public: String( );//...
  • u010105970
  • u010105970
  • 2014年06月12日 15:36
  • 1518

C++--String类型各种重载函数的实现

#include #include #include #include using namespace std; class String { friend bool ...
  • bao2516090
  • bao2516090
  • 2015年07月30日 17:24
  • 4509

string类中运算符重载实现

C++中预定义的加、减等运算符的操作对象只能是基本的数据类型。如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载...
  • dcrmg
  • dcrmg
  • 2016年07月26日 21:12
  • 1072

c++运算符重载字符串想加

阿斯达所多 #include using namespace std; class C { private: string s; public: C(){} C(string a) ...
  • dancheng1
  • dancheng1
  • 2017年02月14日 14:40
  • 649

c++ 逗号操作符重载

Overload Operator Comma 首先看看think in c++ 给出的一个重载的例子 #include using namespace std; class After { ...
  • x356982611
  • x356982611
  • 2016年04月05日 12:32
  • 1644

c++ new操作符的重载

  • bichenggui
  • bichenggui
  • 2009年11月17日 21:22
  • 7689

[蓝桥杯] C++ CH08 01

C++ CH08 01 问题描述   已知一个有理数类Zrf_Ratio,实现如下的操作符重载形式:   friend std::ostream& operator(std::istream&, zr...
  • wzhCAlex
  • wzhCAlex
  • 2017年03月14日 09:16
  • 258

蓝桥杯-c++_ch04_02_修正版(java)

算法提高 c++_ch04_02_修正版 时间限制:1.0s 内存限制:256.0MB   【题目描述】 ...
  • sihai12345
  • sihai12345
  • 2017年04月03日 22:46
  • 209
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string类中“+”操作符重载(三种形式)
举报原因:
原因补充:

(最多只允许输入30个字)