社区
C++ 语言
帖子详情
加号运算符的重载问题
hongfeeling
2003-12-08 09:12:00
test & operator+(test & i1,test & i2)
{
x = i1.x+i2.x;
return *this;
}
编译出错:test::operator+(test &,test&)must take either zero or one argument
请问是怎么回事
...全文
589
12
打赏
收藏
加号运算符的重载问题
test & operator+(test & i1,test & i2) { x = i1.x+i2.x; return *this; } 编译出错:test::operator+(test &,test&)must take either zero or one argument 请问是怎么回事
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hongfeeling
2003-12-18
打赏
举报
回复
谢谢大家的回复
allen_zhaozhencn
2003-12-09
打赏
举报
回复
楼上同志讲得有理,
建议如下定义:
class complex
{
private:
float real;
float imagic;
public:
friend complex operator+(const complex& c1) const;
};
complex operator+(const complex &c1) const
{
return complex(real+c1.real, imagic+c1.imagic);
}
hanyixin
2003-12-08
打赏
举报
回复
我觉得+应该做成全局函数,+=才应该做成类的成员函数。
fireseed
2003-12-08
打赏
举报
回复
应该是这样:
class A
{
public:
int n;
};
A operator+(A & i1,A & i2)
{
A a;
a.n= i1.n + i2.n;
return a;
}
或:
class B
{
public:
int n;
B operator+(B & i1);
};
B B::operator+(B & i1)
{
B b;
b.n= n + i1.n;
return b;
}
fireseed
2003-12-08
打赏
举报
回复
class A
{
public:
int n;
};
A& operator+(A & i1,A & i2)
{
i1.n = i1.n + i2.n;
return i1;
}
fireseed
2003-12-08
打赏
举报
回复
你是不是把这个放到类里面去了?
glacierrr
2003-12-08
打赏
举报
回复
一般二元操作符定义成友元函数,一元函数定义成类成员函数比较好一点
hongfeeling
2003-12-08
打赏
举报
回复
谢谢大家指教了。
我看的是C++PRIMER。
似乎对操作符重载讲的不多。
不知道,各位是看什么的/
wshcdr
2003-12-08
打赏
举报
回复
test & operator+(test & i1,test & i2)
{
x = i1.x+i2.x;
return *this;
}
编译出错:test::operator+(test &,test&)must take either zero or one argument
请问是怎么回事
楼主的test & operator+(test & i1,test & i2)这个函数声明为全局
那return *this;这句就和上一句矛盾了,
呵呵
redhat_xu
2003-12-08
打赏
举报
回复
我想这样写比较好一点!
class complex
{
private:
float real;
float imagic;
public:
complex operator+(const complex&) const;
};
complex complex::operator+(complex &c1)
{
return complex(real+c1.real, imagic+c1.imagic);//防止重复声明类对象.
}
其实加号重载可以设为友元的运算符重载!
不知这样是否能帮上你的忙!
个人意见仅供参考!
Wolf0403
2003-12-08
打赏
举报
回复
operator+ 只能有两种重载形势:一个是作为成员函数,接受一个参数;一个是作为非成员函数(友元),接受两个参数。另外:
test & operator+(test & i1,test & i2)
{
x = i1.x+i2.x;
return *this;
}
这个是 operator+= 的语义而不是 operator+ 的语义,不推荐。
test operator+ (const test &i1, const test &i2)
{
return test(i1.x + i2.x);
}
或者
test test::operator+ (const test &i)
{
return test(this->x + i.x);
}
hongfeeling
2003-12-08
打赏
举报
回复
哦。对的。我放在类的定义里面了。
为什么不可以这么做?
重载
加号
运算符
遇到的
问题
复习
运算符
重载
的时候发现一个小
问题
:在分别调用成员函数和全局函数时,出现了不一样的结果。在类内实现
运算符
重载
,调用成员函数时,连加没有
问题
,而使用全局函数连加时则会报错。如图: 1.调用成员函数 #include<iostream> using namespace std; //
加号
运算符
重载
//作用:实现两个自定义数据类型相加的运算 class Person { public: //1、成员函数
重载
+号 Person operator+(Person &p).
类和对象-
运算符
重载
-C++
赋值
运算符
。
c++中
运算符
重载
(
加号
运算,左移运算,前置后置++
运算符
,赋值运算,关系运算,函数运算)
运算符
重载
注意
重载
的
运算符
要易读 内置的数据类型的表达式的
运算符
是不可以改变的
加号
运算符
重载
如果想让自定义数据类型 进行**+**运算,那么就需要
重载
**+**
运算符
在成员函数 或者 全局函数里 重写 一个**+**
运算符
的函数 函数名operate+(){}
运算符
重载
可以不停
重载
,接着
重载
#include<iostream> using...
C++
运算符
重载
{
加号
、左移、递增、赋值、关系、函数调用
运算符
重载
} 两种
重载
方式:利用成员函数
重载
、利用全局函数
重载
【
重载
方式视情况而定】
运算符
重载
对已有的
运算符
重新定义,使其能够作用于用户自定义类型,并赋予其适应特定需求的功能,同时保持与内置数据类型相同的语法习惯。举个例子来说明上面的红字部分:int a=10;int b=2;int c=a+b;int m_B;Person p1;p1.m_A=10;p1.m_B=5;Person p2;p2.m_A=10;p2.m_B=5;
C++
运算符
重载
4.5
运算符
重载
运算符
重载
概念:对已有的
运算符
重新进行定义,赋予其另- -种功能, 以适应不同的数据类型 4.5.1
加号
运算符
重载
作用:实现两个自定义数据类型相加的运算 #include<iostream> #include<string> using namespace std; //
加号
运算符
重载
class Person{ public: int m_A; int m_B; }; void test01(){ Person p1; p1.m_A .
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章