社区
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 +”的参数太多
...全文
209
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是隐含的。
友元重载是两个参数
微服务系列第八季-Java中重写、
重载
及枚举
微服务应用是分布式开发的主要手段,它很好的解决了高并发等电商平台的问题。微服务系列课程是以Java语言为基础,以SpringCloud+SpringBoot为核心,结合Spring、SpringMVC及MyBatis,通过游戏案例、电商案例,以极简的方式,带领入门的朋友们快速上手微服务开发。全部案例源码分享给学习的朋友,案例采用敏捷开发管理模式,让朋友们在每
一个
阶段,有着游戏过关一样的学习体验。 第六季主要是给大家介绍一下Java中重写、
重载
及枚举。包括:Java中重写的概念、重写中super的使用、方法的重写规则、方法的
重载
概念、方法重写与
重载
的区别、枚举的概念、内部类中使用枚举、迭代枚举元素、在switch中使用枚举类、枚举的常用方法。
运算符
重载
前缀++ 后缀++
运算符
重载
: 运算符与类结合,产生新的含义。 为什么要引入运算符
重载
? 作用:为了实现类的多态性(多态是指
一个
函数名有多种含义) 怎么实现运算符的
重载
? 方式:类的成员函数 或 友元函数(类外的普通函数) 规则:不能
重载
的运算符有 . 和 .* 和 ?: 和 :: 和 sizeof 友元函数和成员函数的使用场合:一般情况下,建议一元运算符
前置++和后置++运算符
重载
的区别(详细)
前置++和后置++的区别及原因详解 返回类型不同、形参不同、代码不同、效率不同、返回值类型的区别等
为什么后置++和后置--是单目运算符却有
一个
int形参
为什么后置++和后置--是单目运算符却有
一个
int形参 今天做到了这样的一道题 我是这么想的:友元函数,那也就是说没有this指针,所以操作数都应该在函数的
参数
列表里。 A、+是双目运算符,
参数
列表里只有1个形参,很明显有this指针,所以A不是友元函数。 B、–是单目运算符,
参数
列表里只有1个
参数
,所以没有this指针,B是友元函数。 C、&&是双目运算符,
参数
列表里有2个
参数
,也没有this指针,所以C也是友元函数。 D、++是单目,有2个
参数
,当时我很疑惑,如果是友元,那应该只有1个参
python 构造函数
重载
_关于python:如何基于
参数
类型
重载
__init__方法?
假设我有
一个
类,它有
一个
名为data的成员,这是
一个
列表。我希望能够用文件名(其中包含初始化列表的数据)或实际列表初始化类。你这样做的技巧是什么?你只是通过查看__class__来检查类型吗?我可能会错过什么把戏吗?我习惯C++,其中
参数
类型超载很容易。在python中使用多个构造函数的干净的python方法可能是什么的副本?@反之亦然?(我的意思是这是老问题)@Wolf我不会说哪
一个
是两个问题之...
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章