| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:请教+的重载
只看楼主 加入收藏
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
结帖率:100%
收藏
已结贴  问题点数:17 回复次数:2 
请教+的重载
这是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
}
放在实现文件中,就会提示错误
书上说+可以通过重载的+=来实现,因而不需要访问成员变量,不必将重载+函数设为友元,那么是不是重载+的声明只能是在类的定义体后呢(像他那样还是在头文件中声明),可以在类的定义体中声明吗?为什么我把重载+的函数放在实现文件中就出错呢,请教一下大家。
搜索更多相关主题的帖子: return 源代码 
2011-04-19 07:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:12 
1. 去掉inline
   既然你放在实现文件中,那么就不可能inline,这是矛盾的

2. 头文件中申明一下 Sales_item operator+(const Sales_item& lhs, const Sales_item& rhs);
   
2011-04-19 08:07
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 2楼 rjsp
请问为什么上面头文件要先声明 Sales_item operator+(const Sales_item&,const Sales_item&);
再在头文件中定义 Sales_item operator+(const Sales_item&,const Sales_item&);呢,直接在头文件中定义
 Sales_item operator+(const Sales_item&,const Sales_item&);不也是可以吗?另外,我想问下,像 Sales_item operator+(const Sales_item&,const Sales_item&);这样的不需要访问类的成员变量的函数是不是不可以在类的定义体中声明,只能在类的定义体外但在头文件中声明?
假如我要重载==操作符(该函数为非成员函数),那我有两种选择,一种在头文件中但在类定义体外声明,然后在实现文件中实现,另一种方法就是直接在头文件中定义该函数,我这样说对吗?
2011-04-19 13:01
快速回复:请教+的重载
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.010888 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved