请教高手c++问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 03:28:42
用友元实现+=重载

#include <iostream.h>
class string
{private: char str[20];
public: string (char *p1="----");
void list();
friend string operator +=(string a,string b);
};
string::string (char *p1)
{for (int i=0;i<20;i++)
str[i]=p1[i];
}
void string::list ()
{cout<<str<<endl;}
string operator += (string a,string b)
{char *p=a.str;
char *q=b.str;
while (*p!=NULL)
p++;
while (*p++=*q++);
return string (p);}
void main()
{string a1("Good "),a2("morning");string add;

add=(a1+=a2);
add.list();
}

为何重载不了?谢谢!

string operator += (string a,string b)
{char *p=a.str;
char *q=b.str;
while (*p!=NULL)
p++;
while (*p++=*q++);
return string (p);}

这个函数的返回值不对,应该把
return string (p);
改为
return a;

再问一句,为什么要这样做呢?
只是为了学习和理解C++吗,如果是为了写程序,我感觉有点没必要。这样的方式容易使人糊涂。除非必要,不使用过多的技巧。

兄弟,我写的和你一模一样,也是不能实现重载,咋办昵?

晕代码一堆问题,没实现赋值操作,长度限制也不检查,不出问题才怪呢

重载定义好像不对

string::string (char *p1)
{for (int i=0;i<20;i++)
str[i]=p1[i];
}
这个错了不能保证长度为了20 了你考虑下面的可以不了
string::string (char *p1)
{int i=0;
while(*p1!='\0')
{
str[i++]=*p1++;
}
str[i]='\0';
}

可以改为了把类名改下了因为C++本身就有这个类了
string operator += (string a,string b)
{
char *p=a.str;
char *q=b.str;
while (*p!='\0')
p++;
while (*p++=*q++&&*q!='\0');
*p='\0';
return string (a.str);