用c++用继承机制自定义一个带有时区的时间类并对这个类加以构造开使用。要求时区用枚举类 型来实现。
时间: 2024-02-18 19:03:26 浏览: 124
好的,我来为您解答。
首先,我们需要自定义一个枚举类型来表示时区,代码如下:
```c++
enum class TimeZone {
UTC_MINUS_12,
UTC_MINUS_11,
UTC_MINUS_10,
UTC_MINUS_9,
UTC_MINUS_8,
UTC_MINUS_7,
UTC_MINUS_6,
UTC_MINUS_5,
UTC_MINUS_4,
UTC_MINUS_3,
UTC_MINUS_2,
UTC_MINUS_1,
UTC,
UTC_PLUS_1,
UTC_PLUS_2,
UTC_PLUS_3,
UTC_PLUS_4,
UTC_PLUS_5,
UTC_PLUS_6,
UTC_PLUS_7,
UTC_PLUS_8,
UTC_PLUS_9,
UTC_PLUS_10,
UTC_PLUS_11,
UTC_PLUS_12
};
```
接下来,我们定义一个基类 Time,代码如下:
```c++
class Time {
public:
Time(int hour, int minute, int second) : hour_(hour), minute_(minute), second_(second) {}
virtual ~Time() {}
virtual void print() const {
std::cout << hour_ << ":" << minute_ << ":" << second_ << std::endl;
}
protected:
int hour_;
int minute_;
int second_;
};
```
这个基类里面包含了小时、分钟和秒钟三个成员变量,以及一个用于输出时间的虚函数 print。
接下来,我们定义一个派生类 TimeZoneTime,它继承自基类 Time,并添加了时区的成员变量,代码如下:
```c++
class TimeZoneTime : public Time {
public:
TimeZoneTime(int hour, int minute, int second, TimeZone tz)
: Time(hour, minute, second), time_zone_(tz) {}
void print() const override {
std::cout << hour_ << ":" << minute_ << ":" << second_ << " " << get_time_zone_string() << std::endl;
}
private:
TimeZone time_zone_;
std::string get_time_zone_string() const {
switch (time_zone_) {
case TimeZone::UTC_MINUS_12:
return "UTC-12";
case TimeZone::UTC_MINUS_11:
return "UTC-11";
case TimeZone::UTC_MINUS_10:
return "UTC-10";
case TimeZone::UTC_MINUS_9:
return "UTC-9";
case TimeZone::UTC_MINUS_8:
return "UTC-8";
case TimeZone::UTC_MINUS_7:
return "UTC-7";
case TimeZone::UTC_MINUS_6:
return "UTC-6";
case TimeZone::UTC_MINUS_5:
return "UTC-5";
case TimeZone::UTC_MINUS_4:
return "UTC-4";
case TimeZone::UTC_MINUS_3:
return "UTC-3";
case TimeZone::UTC_MINUS_2:
return "UTC-2";
case TimeZone::UTC_MINUS_1:
return "UTC-1";
case TimeZone::UTC:
return "UTC";
case TimeZone::UTC_PLUS_1:
return "UTC+1";
case TimeZone::UTC_PLUS_2:
return "UTC+2";
case TimeZone::UTC_PLUS_3:
return "UTC+3";
case TimeZone::UTC_PLUS_4:
return "UTC+4";
case TimeZone::UTC_PLUS_5:
return "UTC+5";
case TimeZone::UTC_PLUS_6:
return "UTC+6";
case TimeZone::UTC_PLUS_7:
return "UTC+7";
case TimeZone::UTC_PLUS_8:
return "UTC+8";
case TimeZone::UTC_PLUS_9:
return "UTC+9";
case TimeZone::UTC_PLUS_10:
return "UTC+10";
case TimeZone::UTC_PLUS_11:
return "UTC+11";
case TimeZone::UTC_PLUS_12:
return "UTC+12";
}
return "";
}
};
```
这个派生类里面添加了一个时区的成员变量 time_zone_,并重写了基类的虚函数 print。在重写的函数中,我们增加了一个输出时区的部分,通过调用 get_time_zone_string 函数来获取时区的字符串表示。
最后,我们可以在 main 函数中测试这个时间类的使用,代码如下:
```c++
int main() {
TimeZoneTime t1(16, 30, 45, TimeZone::UTC_PLUS_8);
t1.print();
TimeZoneTime t2(20, 0, 0, TimeZone::UTC_MINUS_5);
t2.print();
return 0;
}
```
运行这个程序,输出如下:
```
16:30:45 UTC+8
20:0:0 UTC-5
```
这样,我们就成功地用继承机制自定义了一个带有时区的时间类,并对这个类进行了构造和使用。
阅读全文