社区
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 +”的参数太多
...全文
238
7
打赏
收藏
好奇怪,重载"+"的参数是一个么?
bin_seq& operator + (const bin_seq &bs1,const bin_seq &bs2) 给出的错误提示是: d:\Cpp_works\exam4\exam4.cpp(83) : error C2804: 二进制“operator +”的参数太多
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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是隐含的。
友元重载是两个参数
面试问题:
重载
可以理解为一词多用,就是说函数名相同,但是作用各有不同。那么怎么才能进行函数
重载
,或者说函数
重载
的要求是什么。函数
重载
:函数名相同,
参数
不同(类型 or 个数 or 顺序 )我们来看一下函数
重载
的例子int add(){}{}{}{}{}int main()//调用函数,根据
参数
的类型,去找到对应的函数调用add();add(1. 2);return 0;ps:返回值不同,不影响函数
重载
好了,我们知道了什么是函数
重载
,那我来做一小题,分析一下,下面两个函数属不属于
重载
。
c++——引用、const关键字、动态分配内存、内联函数、函数
重载
、
参数
缺省值
定义
一个
引用,并将其初始化为引用某个变量。 类型名 &引用名 =某变量名; int &r=n;//r引用了n,r的类型是 int & 某个变量的引用,等价于这个变量,相当于该变量的
一个
别名。 引用的概念 1.定义引用时一定要将其初始化成引用某个变量。 2.初始化后,它就一直引用该变量,不会在引用别的变量了。 3.引用只能引用变量,不能引用常量和表达...
objective-c:
重载
IOS中
重载
可以通过两种方式: 1、不同的
参数
个数。 2、
参数
个数不变的情况下修改至少
一个
参数
的名称。 好
奇怪
的
重载
方式,就算修改了返回类型也不能实现
重载
。 - (NSInteger) method1:(NSInteger)param1{ return param1; } - (NSString*) method1:(NSString *)...
java 可变
参数
public class TestVarArgs { static void printArray(Object... args) { for (Object obj : args) { System.out.print(obj + " "); } System.out.println(); } }
第一次使用JUnit的收获
今天看《JAVA编程思想》,发现使用JUnit来进行单元调试非常重要,不过书上说得有点深奥,我上网找了一篇比较浅显的文章进行测试,还真发现了问题,呵呵。 我自己写了
一个
LargeNum类,用于支持无限大小的整数,同时实现了加法、减法和乘法操作,还
重载
了equals方法。我用JUnit测试了一下我的加法操作,居然失败了!!!!!我很震惊,不可能啊,我原来测试过很多遍,不应该
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章