<pre name="code" class="html">#pragma once
#ifndef TIME_H
#define TIME_H
class Time {
public:
Time() :hour(0), minute(0), sec(0) {};
Time(int h, int m, int s) :hour(h), minute(m), sec(s) {};
void show_time(); //显示时间
void add_a_sec(); //增加一秒钟
void add_a_minute(); //增加一分钟
void add_an_hour(); //增加一小时
void add_secs(int); //增加n秒钟
void add_minutes(int); //增加n分钟
void add_hours(int); //增加n小时
private:
int hour, minute, sec;
bool is_time(); //判断时间是否合法
};
#endif // !TIME_H
#include<iostream>
#include"time.h"
using namespace std;
bool Time::is_time() {
if (hour < 0 || hour>23 || minute < 0 || minute>59 || dec < 0 || sec>59)
return false;
return true;
}
void Time::show_time() {
if (is_time())
cout << hour << ":" << minute << ":" << sec << endl;
else
cout << "时间非法" << endl;
}
void Time::add_a_sec() {
++sec;
if (sec == 60) {
sec = 0;
add_a_minute();
}
}
void Time::add_a_minute() {
++minute;
if (minute == 60) {
minute = 0;
add_an_hour();
}
}
void Time::add_an_hour() {
++hour;
if (hour == 24)
hour = 0;
}
void Time::add_secs(int n) {
for (int i = 0; i != n; ++i)
add_a_sec();
}
void Time::add_minutes(int n) {
for (int i = 0; i != n; ++i)
add_a_minute();
}
void Time::add_hours(int n) {
for (int i = 0; i != n; ++i)
add_an_hour();
}
add_a_sec() ,add_a_minute(),add_an_hour()三个函数十分简单,作为普通函数调用时将浪费计算机资源,可以修改为:直接定义在类内或者加inline。 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。
上述代码中,增加n秒,n分钟,n小时的函数中,采用for循环,增加了时间开销,作如下修改:
#pragma once
#ifndef TIME_H
#define TIME_H
class Time {
public:
Time() :hour(0), minute(0), sec(0) {};
Time(int h, int m, int s) :hour(h), minute(m), sec(s) {};
void show_time(); //显示时间
inline void add_a_sec(); //增加一秒钟
inline void add_a_minute(); //增加一分钟
inline void add_an_hour(); //增加一小时
void add_secs(int); //增加n秒钟
void add_minutes(int); //增加n分钟
void add_hours(int); //增加n小时
private:
int hour, minute, sec;
bool is_time(); //判断时间是否合法
};
#endif // !TIME_H
#include<iostream>
#include"time.h"
using namespace std;
bool Time::is_time() {
if (hour < 0 || hour>23 || minute < 0 || minute>59 || dec < 0 || sec>59)
return false;
return true;
}
void Time::show_time() {
if (is_time())
cout << hour << ":" << minute << ":" << sec << endl;
else
cout << "时间非法" << endl;
}
inline void Time::add_a_sec() {
++sec;
if (sec == 60) {
sec = 0;
add_a_minute();
}
}
inline void Time::add_a_minute() {
++minute;
if (minute == 60) {
minute = 0;
add_an_hour();
}
}
inline void Time::add_an_hour() {
++hour;
if (hour == 24)
hour = 0;
}
void Time::add_secs(int n) {
sec += n;
if (sec > 59) {
add_minutes(sec/60);
sec %= 60;
}
}
void Time::add_minutes(int n) {
minute += n;
if (minute > 59) {
add_hours(minute / 60);
minute %= 60;
}
}
void Time::add_hours(int n) {
hour += n;
if (hour > 23)
hour %= 25;
}