加号运算符的重载问题

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
请问是怎么回事
...全文
541 12 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
哦。对的。我放在类的定义里面了。
为什么不可以这么做?

64,685

社区成员

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

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