时间类的实现
注意时间的增加的实现
//注意虚函数使用的技巧,以及静态绑定和动态绑定的相关知识
//尚未实现枚举类的正确输出
//created by catherine on 2016, 04, 08
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
class Time{
private:
int hour;
int minute;
int second;
public:
Time();
Time(int inithour,int initminute, int initsecond);
void set(int hours, int minutes, int seconds);
virtual void write() const; //虚函数(注意:一旦基类的某个成员函数为虚,则派生类中的
void increment(); //重定义函数也全部为虚
};
Time::Time() {
hour = minute = second = 0;
}
Time::Time(int inithour, int initminute, int initsecond) {
this->set(inithour, initminute, initsecond); //要善于利用各个成员函数来简化程序
}
void Time::set(int hours, int minutes, int seconds) {
hour = hours;
minute = minutes;
second = seconds;
}
void Time::write() const {
cout << hour << " : " << minute << " : " << second << endl;
}
void Time::increment() {
second++;
if (second >= 60) {
second = 0;
minute++;
if (minute >= 60) {
minute = 0;
hour++;
if (hour >= 24)
hour = 0;
}
}
}
enum zoneType{EST, CST, MST, PST, EDT, CDT, PDT, MDT};
class Exittime:public Time {
public:
Exittime(int inithour, int initminute, int initsecond, zoneType initzone);
Exittime(); //派生类必须要有自己的构造函数
//set是重定义函数
void set(int inithour, int initminute, int initsecond, zoneType initzone);
void write() const; //write也是重定义函数
private:
zoneType zone;
};
Exittime::Exittime():Time() {
zone = EDT; //注意不是 zone = "EDT";
}
//派生类的初始化使用成员初始化列表
Exittime::Exittime(int inithour, int initminute, int initsecond, zoneType zone) {
this->set(inithour, initminute, initsecond, zone);
}
void Exittime::set(int inithour, int initminute, int initsecond, zoneType initzone) {
this->Time::set(inithour, initminute, initsecond);
this->zone = initzone;
}
void Exittime::write() const {
this->Time::write();
cout << " " << zone << endl;
}
void Print(Time &someTime) { //必须用引用或者是指针,否则达不到效果
cout << "Time is : " << endl; //用虚函数实现动态绑定必须使用基类指针或引用来访问虚函数
someTime.write();
}
int main() {
Time startTime(8, 30, 0);
Exittime endTime(10, 45, 0, CST);
Print(startTime);
Print(endTime);
return 0;
}
//注意:函数重载,虚特性丢失
//当派生类没有重定义虚函数时,使用基类的虚函数版本