題目需求
- 基類
DATE:封裝當前年月日(可用 time.h 獲取)。
- 派生類
BIRTHDAY:儲存出生年月日,提供 AGE() 計算年齡。
- 使用示例:
BIRTHDAY Zhang(1988,5,2); cout << Zhang.AGE();
標準實現
#include <iostream>
#include <ctime>
using namespace std;
class DATE {
protected:
int year, month, day;
public:
DATE() {
time_t t = time(nullptr);
tm* now = localtime(&t);
year = now->tm_year + 1900;
month = now->tm_mon + 1;
day = now->tm_mday;
}
int getYear() const { return year; }
};
class BIRTHDAY : public DATE {
int birthYear, birthMonth, birthDay;
public:
BIRTHDAY(int y, int m, int d) : birthYear(y), birthMonth(m), birthDay(d) {}
int AGE() const {
// 簡化:僅按年份差計算,實際需比較月日
return getYear() - birthYear;
}
};
int main() {
BIRTHDAY Zhang(1988, 5, 2);
cout << Zhang.AGE() << endl;
return 0;
}
關鍵點
- 繼承關係:
BIRTHDAY 繼承 DATE 獲取當前時間能力,符合「is-a」關係(生日是一種日期)。
- time.h 使用:
time(nullptr) 獲取時間戳,localtime() 轉本地時間結構體,tm_year 為距 1900 年數。
- 年齡計算精度:示例僅按年差,實際應比較 (month, day) 決定是否已過生日:
return (month > birthMonth || (month == birthMonth && day >= birthDay)) ? year - birthYear : year - birthYear - 1;