Time

本文介绍了一个时间类的实现,并通过继承扩展了其功能。主要讨论了如何在C++中使用虚函数、枚举类型以及如何正确地进行时间的递增操作。同时,文中还涉及了静态绑定和动态绑定的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间类的实现

注意时间的增加的实现

//注意虚函数使用的技巧,以及静态绑定和动态绑定的相关知识
//尚未实现枚举类的正确输出
//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;
}
//注意:函数重载,虚特性丢失
//当派生类没有重定义虚函数时,使用基类的虚函数版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值