后++重载为什么参数还有个int?有什么用处?

wzkgigi 2010-04-20 09:52:31
Clock& operator ++(Clock &P,int) //后置单目运算符重载友元函数
{ //注意形参表中的整型参数
Clock S(P);
P.Second++;
if(P.Second>=60){
P.Second=P.Second-60;
P.Minute++;
if(P.Minute>=60){
P.Minute=P.Minute-60;
P.Hour++;
P.Hour=P.Hour%24;
}
}
cout<<"Clock++: ";
return S;
}
后++重载为什么参数还有个int?有什么用处?
...全文
236 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
icansaymyabc 2010-04-20
  • 打赏
  • 举报
回复
由于不常用,上面回答时记反了
〈函数类型〉operator++(); //前缀运算
〈函数类型〉operator++(int ); //后缀运算
  使用前缀的语法格式如下:++〈对象〉;
  使用后缀的语法格式如下:〈对象〉++;
icansaymyabc 2010-04-20
  • 打赏
  • 举报
回复
对于 operator ++ 和 operator -- 的重载被特殊处理了一下。

因为有该类操作符具有 ++i 和 i++ 两种用法,编译器为了明确加以区别,就设计了一个无用的int参数。


Clock& operator ++(Clock &P,int) 提供 ++clock 这样的语法

Clock& operator ++(Clock &P) 提供 clock++ 这样的语法。

如果你仅定义了 Clock& operator ++(Clock &P,int) 却使用了 clock++,那么会出现函数未定义的错误。
taodm 2010-04-20
  • 打赏
  • 举报
回复
就一个规定。
学C++很多时间就得靠死记硬背“规定”。
jay1002008 2010-04-20
  • 打赏
  • 举报
回复
int是为了与重置++区别,第一个参数是因为是全局的,所以要这个参数,
cattycat 2010-04-20
  • 打赏
  • 举报
回复
你的后缀重载不对吧,一般后缀重载都是 operator++(int)没有第一个参数的。int是为了让编译器区别前置重载的++。

64,654

社区成员

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

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