社区
C++ 语言
帖子详情
好奇怪,重载"+"的参数是一个么?
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 +”的参数太多
...全文
212
7
打赏
收藏
好奇怪,重载"+"的参数是一个么?
bin_seq& operator + (const bin_seq &bs1,const bin_seq &bs2) 给出的错误提示是: d:\Cpp_works\exam4\exam4.cpp(83) : error C2804: 二进制“operator +”的参数太多
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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是隐含的。
友元重载是两个参数
运算符
重载
前缀++ 后缀++
作用:为了实现类的多态性(多态是指
一个
函数名有多种含义) 怎么实现运算符的
重载
? 方式:类的成员函数 或 友元函数(类外的普通函数) 规则:不能
重载
的运算符有 . 和 .* 和 ?: 和 :: 和 sizeof 友元函数和...
前置++和后置++运算符
重载
的区别(详细)
另外,网上找了篇文章,通过从运算符
重载
的角度来探讨他们的不同,如下: 假设有
一个
类Age,描述年龄。该类
重载
了前置++和后置++两个操作符,以实现对年龄的自增。 class Age { public: Age& operator++() //前置++...
C++操作符
重载
+、-、*、/、[]、()、<<、>>、=、new、delete、&&、||、++、--、+=、强制转换
重载
一.来源 假设,现在有类A: class A { public: A(int a) { this->a = a; } private: int a; }; 定义: A a1(1), a2(2); 现在我想直接执行a1+a2,但是C++没有这种方法,所以引出操作符
重载
。 二.实现 现在...
python 构造函数
重载
_关于python:如何基于
参数
类型
重载
__init__方法?
假设我有
一个
类,它有
一个
名为data的成员,这是
一个
列表。我希望能够用文件名(其中包含初始化列表的数据)或实际列表初始化类。你这样做的技巧是什么?你只是通过查看__class__来检查类型吗?我可能会错过什么把戏吗...
浅谈C++中如何
重载
前置++/--与后置++/--
其实,前置++与后置++的功能”先加后用“与”先用后加“已经为这两种操作符的实现指明了路线:...于是,为了填平这个语言上的漏洞,只好让后置式有
一个
int自变量,在其被调用的时候,编译器默默为该int指定
一个
0值。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章