1. 程式人生 > >C++程式設計例項——實現簡單的時間加減運算

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、建構函式:

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》