大學生C++教程第九版 習題(9.9)-繼承

//頭文件  Date.h
#ifndef DATE_H
#define DATE_H
#include <iostream>
#include <array>
using namespace std;

class Date
{
public:
	explicit Date(int, int, int);
	~Date();

	void setDate(int, int, int);

	void nextday();
	bool endOfDay(int, int, int);
	bool leafYear(int);

	void displayMessage();

protected:
	int m_year;
	int m_month;
	int m_day;

};
#endif


 

//Date.cpp
#include "Date.h"
Date::Date(int day, int month, int year)
{
	setDate(day, month, year);
}


Date::~Date()
{
}

void Date::setDate(int day, int month, int year)
{
	static array<int, 12> ArrayMonth =
	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	if (year > 0)
		m_year = year;
	if (month > 0 && month <= 12)
		m_month = month;
	if (day > 0 && day < ArrayMonth[month])
		m_day = day;
	if (month == 2 && leafYear(year) && day <= 29)
		m_day = day;
}

bool Date::leafYear(int yy)
{
	if (yy % 400 == 0 ||(yy % 100 != 0 || yy % 4 == 0))
		return true;
	return false;
}

void Date::nextday()
{
	if (endOfDay(m_day, m_month, m_year))
		++m_day;
	else if (m_month < 12)
	{
		++m_month;
		m_day = 1;
	}
	else
	{
		++m_year;
		m_month = 1;
		m_day = 1;
	}

}

bool Date::endOfDay(int dd, int mm, int yy)
{
	static array<int, 12> ArrayMonth =
	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	if (dd > 0 && dd < ArrayMonth[mm-1])
		return false;
	if (mm == 2 && leafYear(yy) && dd <= 29)
		return false;
	return true;
}

void Date::displayMessage()
{
	cout << "當前日期爲:" << m_month << "/" << m_day << "/" << m_year
		<< endl;
}
//頭文件
#ifndef TIME_H
#define TIME_H
#include "Date.h"
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
class Time :public Date
{
public:
	Time(int, int, int, int, int, int);
	~Time();
	void setTime(int, int, int);
	void printStandard();
	void tick();
private:
	int hour;
	int minute;
	int second;
};
#endif

 

#include "Date.h"
#include "Time.h"

//初始化這裏需要補全
Time::Time(int hh, int min, int sec,int day,int month,int year) :Date(day,month,year)
{
	setTime(hh, min, sec);
}


Time::~Time()
{
}

void Time::setTime(int hh, int min, int sec)
{
	if (hh >= 0 && hh <24)
		hour = hh;
	if (min >= 0 && min < 60)
		minute = min;
	if (sec >= 0 && sec < 60)
		second = sec;
}

void Time::printStandard()
{
	cout << setw(2) << setfill('0') << ((hour % 12 == 0 && hour >= 12) ? 12 : hour % 12) << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << ' '
		<< ((hour >= 12) ? "PM" : "AM") << endl;

	cout << m_day << "/" << m_month << "/" << m_year << endl;

}

void Time::tick()
{
	if (second < 59)
		++second;
	else if (minute < 59)
	{
		++minute;
		second = 0;
	}
	else if (hour < 23)
	{
		++hour;
		minute = 0;
		second = 0;
	}
	else
	{
		nextday();
		hour = 0;
		minute = 0;
		second = 0;
	}


}

 

//驅動程序
#include "Date.h"
#include "Time.h"
#include <iostream>
using namespace std;

int main()
{
	Time date1(23,59,59,29,2,2004);
	date1.tick();
	date1.printStandard();
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章