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》