c++中的重载+如何理解呢

这是primer中的随书源代码classSales_item{....}Sales_itemoperator+(constSales_item&,constSales_i... 这是primer中的随书源代码
class Sales_item{
....
}
Sales_item operator+(const Sales_item&, const Sales_item&);

inline
Sales_item
operator+(const Sales_item& lhs, const Sales_item& rhs)
{
Sales_item ret(lhs); // copy lhs into a local object that we'll return
ret += rhs; // add in the contents of rhs
return ret; // return ret by value
}
以上均在类的定义体内
如果我把
inline
Sales_item
operator+(const Sales_item& lhs, const Sales_item& rhs)
{
Sales_item ret(lhs); // copy lhs into a local object that we'll return
ret += rhs; // add in the contents of rhs
return ret; // return ret by value
}
放在实现文件中,就会提示错误
书上说+可以通过重载的+=来实现,因而不需要访问成员变量,不必将重载+函数设为友元,那么是不是重载+的声明只能是在类的定义体后呢(像他那样还是在头文件中声明),可以在类的定义体中声明吗?为什么我把重载+的函数放在实现文件中就出错呢,请教一下大家。
展开
 我来答
匿名用户
2011-04-20
展开全部
omplex complex::operator +(complex c2) //这步不是很理解
{
return complex([this.]real+c2.real,[this.]imag+c2.imag);//这样就容易理解了
}

/*
“+” ,”-”是双目运算符,为什么在程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。
可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real。
在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为c1.operator+(c2)
即通过对象c1调用运算符重载函数,并以表达式中第二个参数(运算符右侧的类对象c2)作为函数实参。运算符重载函数的返回值是Complex类型,返回值是复数c1和c2之和(Complex(c1.real + c2.real,c1.imag+c2.imag))。
*/

//可参考:

另外,虚机团上产品团购,超级便宜
圣缘E天
2011-04-19 · 超过10用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:0
展开全部
没加作用域名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式