好奇怪,重载"+"的参数是一个么?

freshui 2006-11-29 08:19:01
bin_seq& operator + (const bin_seq &bs1,const bin_seq &bs2)
给出的错误提示是:
d:\Cpp_works\exam4\exam4.cpp(83) : error C2804: 二进制“operator +”的参数太多
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lann64 2006-11-29
  • 打赏
  • 举报
回复
class bin_seq {

private:
int n;
char *bits;
public:

//----------------------------------
bin_seq(char *b=NULL, int length=0);
int getSize() const {return n;}
~bin_seq() {delete [] bits;}

bin_seq operator + (const bin_seq &bs); //----------
bin_seq& operator+=(const bin_seq &bs);
char operator[](int index)
{
if(index<0 || index>n)
throw "Wrong Index!";
else
return bits[index];
}
char operator[](int index) const
{
if(index<0 || index>n)
throw "Wrong Index!";
else
return bits[index];
}

};
bin_seq::bin_seq(char *b,int length)
{
if(NULL==b || length<=0)
{ bits=NULL; n=0; }
else
{
bits=new char[length];
for(int ix=0; ix<length; ix++)
bits[ix]=b[ix];
n=length;
}

}
bin_seq bin_seq::operator +(const bin_seq &bs) //------------
{
int new_length;
new_length=n+bs.getSize();
char *new_bits=new char[new_length];

int ix; //---------------
for(ix=0; ix<n; ix++) //----------
new_bits[ix]=bits[ix];
for( ; ix<new_length; ix++)
new_bits[ix]=bs[ix-n];

//delete bits;
//n=new_length;

bin_seq temp_bs(new_bits,new_length);
delete [] new_bits;

return temp_bs;

}

bin_seq& bin_seq::operator +=(const bin_seq &bs)
{
int new_length;
new_length=n+bs.getSize();
char *new_bits=new char[new_length];

int ix; // ---------
for(ix=0; ix<n; ix++) //----------
new_bits[ix]=bits[ix];
for( ; ix<new_length; ix++)
new_bits[ix]=bs[ix-n];

delete [] bits;
n=new_length;

return *this;
}

语法上应该可以了,逻辑上没认真看。
freshui 2006-11-29
  • 打赏
  • 举报
回复
我把类代码全贴出来:
class bin_seq {

private:
int n;
char *bits;
public:

//----------------------------------
bin_seq(char *b=NULL, int length=0);
int getSize() const {return n;}
~bin_seq() {delete [] bits;}

bin_seq& operator + (const bin_seq &bs);
bin_seq& operator+=(const bin_seq &bs);
char operator[](int index)
{
if(index<0 || index>n)
throw "Wrong Index!";
else
return bits[index];
}
char operator[](int index) const
{
if(index<0 || index>n)
throw "Wrong Index!";
else
return bits[index];
}

};
bin_seq::bin_seq(char *b,int length)
{
if(NULL==b || length<=0)
{ bits=NULL; n=0; }
else
{
bits=new char[length];
for(int ix=0; ix<length; ix++)
bits[ix]=b[ix];
n=length;
}

}
bin_seq& bin_seq::operator +(const bin_seq &bs)
{
int new_length;
new_length=n+bs.getSize();
char *new_bits=new char[new_length];

for(int ix=0; ix<n; ix++)
new_bits[ix]=bits[ix];
for( ; ix<new_length; ix++)
new_bits[ix]=bs[ix-n];

//delete bits;
//n=new_length;

bin_seq temp_bs(new_bits,new_length);
delete [] new_bits;

return temp_bs;

}

bin_seq& bin_seq::operator +=(const bin_seq &bs)
{
int new_length;
new_length=n+bs.getSize();
char *new_bits=new char[new_length];

for(int ix=0; ix<n; ix++)
new_bits[ix]=bits[ix];
for( ; ix<new_length; ix++)
new_bits[ix]=bs[ix-n];

delete [] bits;
n=new_length;

return *this;
}
类数据就是char*
重载的+实现功能就是两串 char * 相加。
lann64 2006-11-29
  • 打赏
  • 举报
回复
不知道你的类怎么实现,不过+重载通常不返回引用类型,+=才返回引用
freshui 2006-11-29
  • 打赏
  • 举报
回复
请看这个重载:
bin_seq& bin_seq::operator +(const bin_seq &bs)
{
int new_length;
new_length=n+bs.getSize();
char *new_bits=new char[new_length];

for(int ix=0; ix<n; ix++)
new_bits[ix]=bits[ix];
for( ; ix<new_length; ix++)
new_bits[ix]=bs[ix-n];

delete bits;
n=new_length;

return *this;
}

这样写对不?
如果不对,这样的写法是不是重载+=的代码啊?
那真正的代码应该是啥样啊?是不是这样吗?

bin_seq& bin_seq::operator +(const bin_seq &bs)
{
int new_length;
new_length=n+bs.getSize();
char *new_bits=new char[new_length];

for(int ix=0; ix<n; ix++)
new_bits[ix]=bits[ix];
for( ; ix<new_length; ix++)
new_bits[ix]=bs[ix-n];

//delete bits;
//n=new_length;

bin_seq temp_bs(new_bits,new_length);
delete new_length;

return temp_bs;
}
lann64 2006-11-29
  • 打赏
  • 举报
回复
当然不是,+重载,一般应该生成一个局部变量,返回这个局部变量
freshui 2006-11-29
  • 打赏
  • 举报
回复
那return呢?return *this就行了啊?
也就是说,在类内重载 + 和重载+=的代码是一样的啊?
lann64 2006-11-29
  • 打赏
  • 举报
回复
你是在类内重载?类内就一个,this是隐含的。
友元重载是两个参数

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧