(在线等,通过马上给分!!)关于operator重载问题

Xleep 2003-12-22 04:06:18
int operator + (int &pi, int &pi2)
{
return (pi) + (pi2);
}

编译出现error C2803: 'operator +' must have at least one formal parameter of class type


能不能告诉我为什么,谢谢!
...全文
55 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xleep 2003-12-23
  • 打赏
  • 举报
回复
!
Xleep 2003-12-22
  • 打赏
  • 举报
回复
谢谢大家,我初学cpp,很多不懂。
superbigboy(风之影),不错,我不知道“在运算符中,参数说明都是内部类型时,不能重载”。我重载运算符主要使之直观、方便。
可能“在运算符中,参数说明都是内部类型时,不能重载”这一条限定是为了防止编译器在类型转换和运算符重载时陷入混乱吧,不知道是不是这个缘故呢?
superbigboy 2003-12-22
  • 打赏
  • 举报
回复
呵呵!

除了jzflyaway(flyaway) 所说的之外,
要知道,运算符重载的时候是对参数的类型有限制的,
运算符重载的语法:
返回类型 operator 运算符号(参数说明);
c++中规定,在运算符中,参数说明都是内部类型时,不能重载.
例如,不可以声明:
int operator + (int *pi, int *pi2);//int *是内部类型

楼主可以用函数实现,为什么要用运算符的重载呢?
victor_cui 2003-12-22
  • 打赏
  • 举报
回复
所以如果你要实现类似的方法,还是建议你对基本的数据类型进行封装,做成对象,如
class IntPtr{
int *ptr;
IntPtr();
public:
IntPtr(int &val):ptr(&val){};
int operator()(){ return *ptr;};///取值
friend int &operator(IntPtr &lval, IntPtr &rval)
{ return lval() + rval();}
};
victor_cui 2003-12-22
  • 打赏
  • 举报
回复
你的想法不错,但是却不能这样做,因为你不是真正意义上的运算符重载,而是改变了其最原始的意义,当然是不允许的,比如:int n = 100; int *i = &n; int m= 10;
int *j = &m;
正常情况下:int result = i + j 会是什么?要知道,i,j 不是对象,而是基本的数据类型(long),呵呵,不会引发你所谓的重载,结果得到了直接转型,即result = &m + &n,结果什么,当然是两个地址的和了
Xleep 2003-12-22
  • 打赏
  • 举报
回复
shit,不小心按了回复。
jzflyaway(flyaway) ,我确实对运算符重载还没有搞清楚。

我这个operator + 不是类的运算符重载,它是全局的所需要起的作用是让编译器知道两个变量相加的时候,决议(resolve)的时候调用的是我定义的函数。比如:我定义
int operator + (int *pi, int *pi2)
{
return (*pi) + (*pi2);
}


而当我在其他函数里面:
int *xx,*yy, x, y, result;
x = 10;
y = 20;
xx = &x;
yy = &y;
result = xx + yy;//决议为result = operator + (xx, yy) 即result=30;
怎么实现?

Xleep 2003-12-22
  • 打赏
  • 举报
回复

我这个operator + 不是类的运算符重载,它是全局的所需要起的作用是让编译器
langzi8818 2003-12-22
  • 打赏
  • 举报
回复
楼上的说得对
redhat_xu 2003-12-22
  • 打赏
  • 举报
回复
这说明你对运算符重载还没有搞清楚。

在非友元函数的运算符重载过程中,如果是单目运算符重载,那么它没有必要带参数。
如果是二目运算符.那么它的参数只有一个。
在友元函数的运算符重载过程中,如果是单目运算符重载,那么它的参数只有一个。
如果是二目运算符.那么它的参数则有两个。

显然在你写的程序中多了一个参数。
int operator + (int &pi)
{
return (pi+p);//p为类的数据成员
}

64,685

社区成员

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

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