使用组合法和继承法来构造DateTime,包括:构造函数、析构函数、设置时间日期的函数、显示时间日期的函数,定义DateTime的对象,观察构造和析构的顺序。
时间: 2024-10-28 07:11:55 浏览: 22
在使用组合法(Composition)和继承法(Inheritance)构造DateTime类时,我们通常会创建一个基类TimeComponent,包含基本的时间属性如年、月、日等,然后DateTime类继承这个基类,并添加额外的小时、分钟和秒的成员变量。下面是一个简单的例子:
```cpp
class TimeComponent {
private:
int year;
int month;
int day;
public:
// 构造函数
TimeComponent(int y = 0, int m = 0, int d = 0) : year(y), month(m), day(d) {}
~TimeComponent(); // 默认析构函数
// 设置时间日期的函数
void setDate(int year_, int month_, int day_) {
year = year_;
month = month_;
day = day_;
}
// 显示时间日期的函数
virtual void display() const {
std::cout << "Year: " << year << ", Month: " << month << ", Day: " << day << std::endl;
}
};
// 定义DateTime类继承自TimeComponent
class DateTime : public TimeComponent {
private:
int hour;
int minute;
int second;
public:
// 构造函数
DateTime(int y, int m, int d, int h = 0, int min = 0, int sec = 0)
: TimeComponent(y, m, d), hour(h), minute(min), second(sec) {}
~DateTime() override; // 覆盖基类析构函数以显式定义
// 设置时间日期和时间的函数
void setTime(int hour_, int minute_, int second_) {
hour = hour_;
minute = minute_;
second = second_;
}
// 显示完整的时间日期信息
void displayFull() const override {
TimeComponent::display();
std::cout << "Hour: " << hour << ", Minute: " << minute << ", Second: " << second << std::endl;
}
};
// 实现析构函数(默认无操作)
TimeComponent::~TimeComponent() {}
DateTime::~DateTime() override { }
int main() {
DateTime date(2023, 4, 5, 15, 30, 45);
date.displayFull(); // 输出完整日期和时间
return 0;
}
```
在这个例子中,当我们创建`DateTime`对象时,会先调用`TimeComponent`的构造函数初始化基础时间部分,然后再调用自己的构造函数设置完整的日期和时间。同样地,在对象销毁时,会先调用`DateTime`的析构函数,接着才是`TimeComponent`的析构函数。
阅读全文