+ -
当前位置:首页 → 问答吧 → 自己尝试写一个CString类,一个关于“+”操作符重载的问题

自己尝试写一个CString类,一个关于“+”操作符重载的问题

时间:2011-12-21

来源:互联网


我自己写了两个+运算符重载:
MyCString& operator+(const char* strAdd); 
MyCString& operator+(const MyCString& strAdd);

但是如下测试时:
MyCString str1,str2;
str1 = "abc";
str2 = "123" + str1;
出现问题,意思就是说匹配不上

请问根据str2 = "123" + str1这句的一个+运算符重载如何定义?



作者: me5438   发布时间: 2011-12-21

为什么要重载啊?

CString 的字符操作很方便的。

有时可以: str2 = _T("123") + str1;

也最好用 str2.Format( _T("123%s"), str1 );

作者: keith_cheung   发布时间: 2011-12-21

引用 1 楼 keith_cheung 的回复:
为什么要重载啊?

CString 的字符操作很方便的。

有时可以: str2 = _T("123") + str1;

也最好用 str2.Format( _T("123%s"), str1 );


自己做测试学习呢

作者: me5438   发布时间: 2011-12-21

重载的这两个都是类的成员函数吧

你应该再加几个友元函数类型的重载函数

作者: mayudong1   发布时间: 2011-12-21

请问根据str2 = "123" + str1这句的一个+运算符重载如何定义?
定义为友元函数

作者: VisualEleven   发布时间: 2011-12-21

引用 4 楼 visualeleven 的回复:
请问根据str2 = "123" + str1这句的一个+运算符重载如何定义?
定义为友元函数


这样?friend MyCString& operator+(const char *str,const MyCString &string);

作者: me5438   发布时间: 2011-12-21

MyCString& operator+(const char* strAdd);  
MyCString& operator+(const MyCString& strAdd);

str1 = "abc";
str2 = "123" + str1;

怎么匹配的上。。。
"123"又不是你类的对象对它调用operator+(),肯定是不行。
str2 = str1 + "123";这样才和MyCString& operator+(const char* strAdd); 匹配

作者: modicum_ck   发布时间: 2011-12-21

函数原型最好定义为如下形式:
String operator + (const String &s1,const String &s2)

这样可以避免6楼所说的情况。
如果不修改定义形式,则需要注意调用时常值字符串应该在“+”号的右侧。

作者: fight_in_dl   发布时间: 2011-12-21

定义友元
MyCString& operator+(const char* strAdd, MyCString &strAdd2);
这样的话就只能返回strAdd2了;

作者: modicum_ck   发布时间: 2011-12-21

引用 7 楼 fight_in_dl 的回复:
函数原型最好定义为如下形式:
String operator + (const String &s1,const String &s2)

这样可以避免6楼所说的情况。
如果不修改定义形式,则需要注意调用时常值字符串应该在“+”号的右侧。


请完全忽视掉8楼,SB了。。。
这些天没用c++都忘记了。

作者: modicum_ck   发布时间: 2011-12-21

引用 6 楼 modicum_ck 的回复:
MyCString& operator+(const char* strAdd);
MyCString& operator+(const MyCString& strAdd);

str1 = "abc";
str2 = "123" + str1;

怎么匹配的上。。。
"123"又不是你类的对象对它调用operator+(),肯定是不行。
str2 =……

嗯,是这样的,但是如果非要实现str2 = "123" + str1呢?毕竟"123" + str1的结果和str1 + “123”的值是不一样的呀

作者: me5438   发布时间: 2011-12-21

friend MyCString& operator+(const char* strAdd, MyCString &strAdd2);
friend MyCString& operator+(MyCString &strAdd, const char* strAdd2);

两种形式都定义一下试试呗

作者: mayudong1   发布时间: 2011-12-21

friend MyCString& operator+(const char *str,MyCString &string);

MyCString& operator+(const char *str,MyCString& string)
{
char *pAdd = new char[strlen(str) + string.DataLen +1];
strcpy(pAdd,str);
strcat(pAdd,string.myData);
static MyCString stringAdd;
stringAdd = pAdd; //调用赋值运算符
delete pAdd; 
return stringAdd;
}

一下是赋值“=”重载:
MyCString& MyCString::operator =(const char *str) 
{  
int nTagLen = strlen(str); 
char* pAdd = new char[nTagLen+1]; 
if( pAdd ) 

strcpy(pAdd,str); 
DataLen = nTagLen+1; //MyCString类表示长度成员

delete myData; 
myData = pAdd; //MyCString类char*成员

return *this; 
}

作者: lsq19871207   发布时间: 2011-12-21