www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第4章/s4_11/sclass4_11_counter.cpp

    //Download by http://www.NewXing.com
//类的实现文件
//文件名:ch4_11\sclass4_11_counter.cpp

#include "sclass4_11_counter.h"			//包含类定义头文件

CCounter::CCounter( );					//构造函数
 	
//后缀++
int CCounter::operator++( int i )			//重载后缀++,先取值,后自加
{
	int iReturnValue = 0;				//创建一个临时对象,原来保存对象原来的值
	iReturnValue = m_value;			//对象原值赋给临时对象
	if( m_value<65635 )
	{
    	m_value = m_value++;	 //此处++为系统默认含义;因为m_value不是CCounter的对象
	}
	else					 //0~65635的计数器,超过则置0
	{
		m_value = 0;
	}
	return iReturnValue;				//返回对象原值,也就是临时对象的值
}
  
int CCounter::operator--( int i )	//重载后缀--。先取值,后自减
{
	int iReturnValue = 0;				//创建一个临时对象,原来保存对象原来的值
	iReturnValue = m_value;			//对象原值赋给临时对象

	if( m_value>0 )
	{
		m_value--;			//此处--为系统预定义含义;因为m_value不是CCounter的对象
	}
	else						//0~65635的计数器,小于0则置65635
	{
		m_value = 65635;
	}
	return iReturnValue;				//返回对象原值,也就是临时对象的值
}


//重载前缀++
int CCounter::operator++( )			//重载前缀++,先自加,后取值
{
	if( m_value<65635 )
	{
    	m_value = m_value++;	 //此处++为系统默认含义;因为m_value不是CCounter的对象
	}
	else					//0~65635的计数器,超过则置0。
	{
		m_value = 0;
	}
	return m_value;		//返回修改后的原对象的值
}
  
int CCounter::operator--( )		//重载前缀--,先自减,后取值
{
	if( m_value>0 )
	{
		m_value--;			//此处--为系统预定义含义;因为m_value不是CCounter的对象
	}
	else					//0~65635的计数器,小于0则置65635
	{
		m_value = 65635;
	}
	return m_value;		//返回修改后的原对象的值
}

int CCounter::operator( )( )	//重载函数运算符,功能:取当前计数器的值
{
 	return m_value;
}

CCounter CCounter::operator=(int iNum)		//重载赋值运算符,将整型值赋给对象
{
	m_value = iNum; 
	return *this;
}

//算术运算符重载
CCounter CCounter::operator+(CCounter ob)	//重载算术运算符:对象+对象
{
	m_value = m_value + ob.m_value;		//将两个对象的m_value值相加,作为返回对象的值
	if (m_value>65535)
	{
		m_value = m_value - 65536;		//保证m_value的值在0~65535之间
	}
	return *this;
}

CCounter CCounter::operator-(CCounter ob)	//重载算术运算符:对象+对象
{
	if (m_value > ob.m_value)				//保证m_value的值在0~65535之间
	{
		m_value = m_value - ob.m_value;		//将两个对象的m_value值相减,作为返回对象的值
	}
	else
	{
		m_value = ob.m_value - m_value;	
	}
	return *this;
}

CCounter operator+(CCounter ob, int iNum)	//重载算术运算符:对象+整数
{
	CCounter oCCounter;
  	oCCounter.m_value = ob.m_value + iNum;
  	return oCCounter;
}
 
CCounter operator+(int iNum, CCounter ob)	//重载算术运算符:整数+对象
{
	CCounter oCCounter;
   	oCCounter.m_value = ob.m_value + iNum;
  	return oCCounter;
}

//重载比较运算符
bool CCounter::operator>(CCounter ob)		//重载比较运算符:对象>对象
{
	if (m_value > ob.m_value)
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool CCounter::operator<=(CCounter ob)		//重载比较运算符:对象<对象
{
	if (m_value <= ob.m_value)
	{
		return true;
	}
	else
	{
		return false;
	}
}