• 第八周项目二


    /     
    * 程序的版权和版本声明部分     
    * Copyright (c)2012, 烟台大学计算机学院学生     
    * All rightsreserved.     
    * 文件名称: Complex.cpp     
    * 作 者:王立强    
    * 完成日期:2013 年4月23日     
    * 版本号: v1.0     
    * 对任务及求解方法的描述部分:略     
    * 输入描述:略     
    * 问题描述:略     
    * 程序输出:如下     
    */      
    
    #include <iostream>
    using namespace std;
    class CTime
    {
    private:
    	unsigned short int hour;    // 时
    	unsigned short int minute;  // 分
    	unsigned short int second;  // 秒
    public:
    	CTime(int h=0,int m=0,int s=0);
    	void setTime(int h,int m,int s);
    	void display();
    	//比较运算符(二目)的重载
    	bool operator > (CTime &t);
    	bool operator < (CTime &t);
    	bool operator >= (CTime &t);
    	bool operator <= (CTime &t);
    	bool operator == (CTime &t);
    	bool operator != (CTime &t);
    	//二目运算符的重载
    	CTime operator+(CTime &c);//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
    	CTime operator-(CTime &c);//对照+理解
    	CTime operator+(int s);//返回s秒后的时间
    	CTime operator-(int s);//返回s秒前的时间
    	//一目运算符的重载
    	CTime operator++(int);//后置++,下一秒
    	CTime operator++();//前置++,下一秒
    	CTime operator--(int);//后置--,前一秒
    	CTime operator--();//前置--,前一秒
    	//赋值运算符的重载   
    	CTime operator+=(CTime &c);
    	CTime operator-=(CTime &c);
    	CTime operator+=(int s);//返回s秒后的时间
    	CTime operator-=(int s);//返回s秒前的时间
    };
    
    //构造函数
    CTime::CTime(int h,int m,int s)
    {
    	hour=h;
    	minute=m;
    	second=s;
    }
    // 设置时间
    void CTime::setTime(int h,int m,int s)
    {
    	hour=h;
    	minute=m;
    	second=s;
    }
    
    //显示时间
    void CTime::display()
    {
    	cout<<hour<<':'<<minute<<':'<<second<<endl;
    }
    
    //比较运算符的重载
    bool CTime::operator > (CTime &t) // 判断时间t1>t2
    {
    	if (hour>t.hour) return true;
    	if (hour<t.hour) return false;
    	if (minute>t.minute) return true;
    	if (minute<t.minute) return false;
    	if (second>t.second) return true;
    	return false;
    }
    
    bool CTime::operator < (CTime &t)// 判断时间t1<t2
    {
    	if (hour<t.hour) return true;
    	if (hour>t.hour) return false;
    	if (minute<t.minute) return true;
    	if (minute>t.minute) return false;
    	if (second<t.second) return true;
    	return false;
    }
    
    bool CTime::operator == (CTime &t)// 判断时间t1==t2
    {
    	if (*this<t || *this>t) return false;
    	return true;
    }
    
    bool CTime::operator != (CTime &t) // 判断时间t1!=t2
    {
    	if (*this==t) return false;
    	return true;
    }
    
    bool CTime::operator >= (CTime &t)// 判断时间t1>=t2
    {
    	if (*this<t) return false;
    	return true;
    }
    
    bool CTime::operator <= (CTime &t) // 判断时间t1<=t2
    {
    	if (*this>t) return false;
    	return true;
    }
    
    //二目运算符的重载
    // 计算时间之和, 返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
    CTime CTime::operator + (CTime &t)
    {
    
    	int h,m,s;
    	s=second+t.second;
    	m=minute+t.minute;
    	h=hour+t.hour;
    	if (s>59)
    	{
    		s-=60;
    		m++;
    	}
    	if (m>59)
    	{
    		m-=60;
    		h++;
    	}
    	if (h>23) h-=24;
    	CTime t0(h,m,s);
    	return t0;
    }
    //返回s秒后的时间
    CTime CTime::operator+(int s)
    {
    	int ss=s%60;
    	int mm=(s/60)%60;
    	int hh=s/3600;
    	CTime t0(hh,mm,ss);
    	return *this+t0;
    }
    
    // 计算时间之差
    CTime CTime::operator - (CTime &t)
    {
    	int h,m,s;
    	s=second-t.second;
    	m=minute-t.minute;
    	h=hour-t.hour;
    	if (s<0)
    	{
    		s+=60;
    		m--;
    	}
    	if (m<0)
    	{
    		m+=60;
    		h--;
    	}
    	if (h<0) h+=24;
    	CTime t0(h,m,s);
    	return t0;
    }
    
    //返回s秒前的时间
    CTime CTime::operator-(int s)
    {
    	int ss=s%60;
    	int mm=(s/60)%60;
    	int hh=s/3600;
    	CTime t0(hh,mm,ss);
    	return *this-t0;
    }
    
    //一目运算符的重载
    CTime CTime::operator++(int)//后置++,下一秒
    {
    	CTime t=*this;
    	*this=*this+1;
    	return t;
    }
    
    CTime CTime::operator++()//前置++,下一秒
    {
    	*this=*this+1;
    	return *this;
    }
    
    CTime CTime::operator--(int)//后置--,前一秒
    {
    	CTime t=*this;
    	*this=*this-1;
    	return t;
    }
    
    CTime CTime::operator--()//前置--,前一秒
    {
    	*this=*this-1;
    	return *this;
    }
    
    //赋值运算符的重载   
    CTime CTime::operator+=(CTime &c)
    {
    	*this=*this+c;
    	return *this;
    }
    CTime CTime::operator-=(CTime &c)
    {
    	*this=*this-c;
    	return *this;
    }
    CTime CTime::operator+=(int s)//返回s秒后的时间
    {
    	*this=*this+s;
    	return *this;
    }
    CTime CTime::operator-=(int s)//返回s秒前的时间
    {
    	*this=*this-s;
    	return *this;
    }
    
    int main()
    {
    	CTime t1(8,20,25),t2(11,20,50),t;
    	cout<<"t1为:";
    	t1.display();
    	cout<<"t2为:";
    	t2.display();
    	cout<<"下面比较两个时间大小:\n";
    	if (t1>t2) cout<<"t1>t2"<<endl;
    	if (t1<t2) cout<<"t1<t2"<<endl;
    	if (t1==t2) cout<<"t1=t2"<<endl; 
    	if (t1!=t2) cout<<"t1≠t2"<<endl;
    	if (t1>=t2) cout<<"t1≥t2"<<endl;
    	if (t1<=t2) cout<<"t1≤t2"<<endl;
    	cout<<endl;
    	//在测试下面的代码时,采用单步执行的方法跟踪
    	t=t1++;
    	t=++t1;
    	t1--;
    	--t1;
    	t=t1+t2;
    	t=t1-t2;
    	t=t1+2000;
    	t=t1-5000;
    	t1+=t2;
    	t1-=t2;
    	t1+=2000;
    	t1-=5000;
    	return 0;
    }


  • 相关阅读:
    PCA手写版 Learner
    泛解析和伪静态实现二级域名(net技术)
    内存分配笔记(一)
    NVelocity的使用总结
    从discuz 里扒过来的一个通用序列化和反序列化类
    类中的执行顺序
    Nhibernate 工具 Nh profiler 使用方法
    UML中几种类间关系
    golf的23种设计模式
    net中的定时器
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3041117.html
Copyright © 2020-2023  润新知