C++编程实例——实现简单的时间加减运算

C++是面向对象的程序语言,区别我们的C语言,具体编程首先要定义一个类,类中包含私有成员以及公有成员两部分,私有成员主要是变量,公有成员主要是方法,另外还需要另外的.cpp程序来实现这些公有方法,以及一个主函数。一般的,外部对私有成员是不能直接访问的,需要通过调用公有方法来实现访问私有成员。

本程序用来实现对时间的加减,例如2小时40分钟加上5小时55分钟,最后输出结果:8小时35分钟。
该程序中主要涉及引用以及方法重载

一、mitime.h

#ifndef MYTIME0_H_
#define MYTIME0_H_

class Time         //定义Time类
{
    private:             //私有成员
        int hours;
        int minutes;

    public:                    //公有成员(一般是方法)
        Time();                //无参构造函数(默认构造函数)
        Time (int h,int m=0);  //带参构造函数  
        void AddMin(int m);     
        void AddHr(int h);
        void Reset (int h=0,int m=0);  
        Time Sum(const Time & t) const;   //参数为一个引用
        void Show() const;
};
#endif

1、构造函数:

构造函数主要用于初始化数据成员,大致分为:无参数构造函数,一般构造函数(重载构造函数),复制构造函数。
参考:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html

2、引用:

  • 引用概念:

    引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

  • 引用实例:

int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

二、mytime.cpp

该程序主要用来对类的公有成员(方法)进行具体实现。
::表示作用域解析运算符,指定方法所属域,提高可读性。如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::”

#include <iostream>
#include "mytime.h"

Time::Time()          //默认构造函数用于数据成员初始化
{
   hours=minutes=0;
}

Time::Time(int h,int m)  //重载构造函数
{
   hours=h;
   minutes=m;
}

void Time::AddMin(int m)
{
   minutes +=m;
   hours +=minutes/60;
   minutes %=60;
}

void Time::AddHr(int h)
{
   hours+=h;
}

void Time::Reset(int h,int m )
{
   hours=h;
   minutes=m;
}
Time Time::Sum(const Time & t)const
{
   Time sum;
   sum.minutes=minutes+t.minutes;           
   sum.hours=hours+t.hours+sum.minutes/60;
   sum.minutes %=60;
   return sum;
}
void Time::Show()const
{
   std::cout<<hours<<" hours ,"<<minutes<<" minutes";
}

特别注意的是Time Time::Sum的参数是一个引用,使用引用的好处是当传入参数后,参数相当于有了个别名t,可以直接用t来作为对象调用数据成员。

方法重载

这段代码还可以用方法重载来实现,方法重载,顾名思义就是要重载方法,operator+表示重载加法,重载以后的加法就不同于我们之前使用的加法了,这里的加法是用来实现两个时间的加法,区别于我们之前的加法。

Time Time::operator+(const Time &t) const
{
   Time sum;
   sum.minutes=minutes+t.minutes;           
   sum.hours=hours+t.hours+sum.minutes/60;
   sum.minutes %=60;
   return sum;
}

三、main.cpp

定义一个对象,通过对象调用方法。

#include <iostream>
#include "mytime.h"

int main()
{
   using std::cout;
   using std::endl;
   Time planning;        //定义一个对象
   Time coding(2,40);    //定义一个对象,并初始化他的私有成员hours=2,minutes=40
   Time fixing(5,55);    //5小时55分钟
   Time total;

   cout<< "planning time= ";
   planning.Show();      //对象调用公有方法
   cout<<endl;           //换行

   cout<<"coding time=";
   coding.Show();
   cout<<endl;

   cout <<"fixing time=";
   fixing.Show();
   cout<<endl;

   total=coding.Sum(fixing);        //fixing是一个引用,作为参数传给sum,然后coding在调用sum
   cout<<"coding.Sum(fixing)=";
   total.Show();

   cout<<endl;

   return 0;
}

1、total=coding.Sum(fixing);

coding和fixing都是对象,一个作为参数(该参数为引用),一个作为调用的主体,这样就调用了Sum实现了两个对象内容的相加。
如果调用方法重载的函数则可以直接实现:
total=coding+fixing;

运行结果:
这里写图片描述

参考《C++ Premer Plus》

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值