首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 繼承練習:DATE 基類與 BIRTHDAY 派生類計算年齡

     編輯:程式設計綜合問答

題目需求

  • 基類 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;
}

關鍵點

  1. 繼承關係:BIRTHDAY 繼承 DATE 獲取當前時間能力,符合「is-a」關係(生日是一種日期)。
  2. time.h 使用:time(nullptr) 獲取時間戳,localtime() 轉本地時間結構體,tm_year 為距 1900 年數。
  3. 年齡計算精度:示例僅按年差,實際應比較 (month, day) 決定是否已過生日:
    return (month > birthMonth || (month == birthMonth && day >= birthDay)) ? year - birthYear : year - birthYear - 1;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved