设计一个Date类,其结构如下: 私有数据成员char* pYMD;指向字符串的指针,表示"****年**月**日"; 公有成员函数 重载构造函数实现数据成员初始化(带参数和Copy构造); 重载"="运算符,实现对象直接赋值; Date& Add([参数列表]); 计算n天以后是"****年**月**日"; Date& Sub([参数列表]); 计算n天以前是"****年**月**日"; void Display(); 输出Date对象的数据"****年**月**日"; 设计一个Date类的派生类Time,其结构如下: 私有数据成员char* pHMS;指向字符串的指针,表示"**时**分**秒"; 公有成员函数 重载构造函数实现数据成员初始化(带参数和Copy构造); 重载"="运算符,实现对象直接赋值; Time& Add([参数列表]); 计算H时M分S秒以后是"****年**月**日**时**分**秒"; Time& Sub([参数列表]); 计算H时M分S秒以前是"****年**月**日**时**分**秒";
时间: 2023-07-23 17:38:59 浏览: 101
下面是实现Date类和Time类的代码:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
class Date {
private:
char* pYMD;
public:
Date(const char* ymd = "1970年01月01日") {
pYMD = new char[strlen(ymd) + 1];
strcpy(pYMD, ymd);
}
Date(const Date& date) {
pYMD = new char[strlen(date.pYMD) + 1];
strcpy(pYMD, date.pYMD);
}
~Date() {
delete[] pYMD;
}
Date& operator=(const Date& date) {
if (this != &date) {
delete[] pYMD;
pYMD = new char[strlen(date.pYMD) + 1];
strcpy(pYMD, date.pYMD);
}
return *this;
}
Date& Add(int n) {
// 省略计算n天以后的代码
return *this;
}
Date& Sub(int n) {
// 省略计算n天以前的代码
return *this;
}
void Display() {
cout << pYMD << endl;
}
};
class Time : public Date {
private:
char* pHMS;
public:
Time(const char* ymd = "1970年01月01日", const char* hms = "00时00分00秒") : Date(ymd) {
pHMS = new char[strlen(hms) + 1];
strcpy(pHMS, hms);
}
Time(const Time& time) : Date(time) {
pHMS = new char[strlen(time.pHMS) + 1];
strcpy(pHMS, time.pHMS);
}
~Time() {
delete[] pHMS;
}
Time& operator=(const Time& time) {
if (this != &time) {
Date::operator=(time);
delete[] pHMS;
pHMS = new char[strlen(time.pHMS) + 1];
strcpy(pHMS, time.pHMS);
}
return *this;
}
Time& Add(int n) {
Date::Add(n);
// 省略计算H时M分S秒以后的代码
return *this;
}
Time& Sub(int n) {
Date::Sub(n);
// 省略计算H时M分S秒以前的代码
return *this;
}
void Display() {
Date::Display();
cout << pHMS << endl;
}
};
```
注意,Time类继承自Date类,并且在构造函数中调用了Date类的构造函数。此外,Time类还需要实现Add和Sub函数来计算H时M分S秒以后或以前的日期和时间。在函数中,可以先调用Date类的Add和Sub函数计算出日期,然后再计算出时间。最后,重载了Display函数以便输出日期和时间。
阅读全文