重载运算符 ++ 和 --
来源:互联网 发布:北京中关村软件培训 编辑:程序博客网 时间:2024/05/16 19:41
重载运算符 ++ 和 --
运算符++和—有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置运算符,使用operator++(int)或operator--(int)来重载后置运算符,调用时,参数int被传递给值0。如下列程序段:
#include <iostream.h>
class Clock
{
public:
Clock(int newHour = 0,int newMinute = 0,int newsSecond = 0);
void showTime( );
Clock operator ++( );
Clock operator ++( int );
private:
void incOneSecond( );
int hour,minute,second;
};
void Clock::incOneSecond( )
{
second++;
if(second>=60)
{
second=second-60;
minute++;
if(minute>=60)
{
minute = minute - 60;
hour++;
hour=hour%24;
}
}
}
Clock::Clock(int newHour , int newMinute, int newSecond)
{
if(0<=newHour&&newHour<24&&0<=newMinute&&newMinute<60&&0<=newSecond&&newSecond<60)
{
hour = newHour;
minute = newMinute;
second = newSecond;
}
else cout<<”time error!”;
}
void Clock::showTime( )
{
cout<<hour<<”:”<<minute<<”:”<<second<<endl;
}
Clock Clock::operator++( ) //前置
{
incOneSecond( );
cout<<”++Clock:”;
return *this;
}
Clock Clock::operator++( int ) //后置
{ Clock temp(*this);
incOneSecond( );
cout<<”Clock++:”;
return temp;
}
void main( )
{
Clock myClock(23,59,59);
cout<<”first time output:”;
myClock.showTime();
myClock++.showTime();
(++myClock).showtime();
}
对于“++” 和“--”这两个一元运算符,存在前置和后置的问题,在定义时必须有所区分。
(1) 用成员函数的形式来进行重载
如果++为前增量运算符时,重载函数的一般格式为:
< type > ClassName :: operator ++ ( )
{
//…
}
如果++为后增量运算符时,重载函数的一般格式为:
< type > ClassName :: operator ++ ( int )
{
//…
}
(2) 非成员函数形式的重载
以++ 为例说明
用友元函数来实现“++”运算符的重载时,前置++运算符的重载的一般格式:
friend <type> operator ++ (ClassName & );
其中,第一个参数是要实现++运算的对象。
后置++运算符的重载的一般格式:
friend <type> operator ++(ClassName &,int);
其中,第一个参数是要实现++运算的对象;而第二个参数除了用于区分是后置运算外,并没有其他意义,故起参数可有可无
- 重载运算符 ++ 和 --
- C#运算符重载和方法重载
- 【C++】重载运算符和重载函数
- C++ 重载运算符和重载函数
- C++ 重载运算符和重载函数
- 运算符重载和字符串
- 不要重载&&和||运算符
- 可重载运算符和不可重载运算符
- c++ 可重载运算符和不可重载运算符
- c++ 可重载运算符和不可重载运算符
- 重载双目运算符和重载单目运算符
- C++运算符重载(11) - 重载<<和>>操作符
- c++基础9:函数,函数重载和运算符重载
- 重载()运算符和重载强制类型转换
- 《C++》12 C++ 重载运算符和重载函数
- 重载之重载流插入和流提取运算符
- c#可重载和不可重载运算符
- 赋值运算符和操作符重载
- C++ AMP: restrict – a key new language feature introduced with C++ AMP
- MySQL实现rownum
- 1.把二元查找树转变成排序的双向链表
- 1G,2G,3G,4G与LTE知识普及
- 在svn中如何使用tag,branch,trunk等功能
- 重载运算符 ++ 和 --
- C++ 多态 解析
- OCP-1Z0-053-V12.02-591题
- 国家对五险一金的交纳说明
- Java与Android很实用的技术
- Box2D中的概念
- 文件及文件夹操作
- Ubuntu12.04下安装、使用、卸载MySQL
- Spring AOP + 事物