行尸走肉原著漫画:请教高手c++问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 19:06:48
用友元实现+=重载

#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);
}
主要改了
a1+=a2;
建议这个函数不要用友元了因为他不是很好返回了
如里就是+那用友元很好了你考虑不用友元了

你的声名有问题,在语言规范中+=运算符是一个二元运算符,但是第一个必须是左值,lvalue,你把运算符的参数中的第一个和返回值改成string& 就可以了