Die Rumpf implementierungen sehen so aus.
#ifndef MYCODE_CJULIANDATE_H_ #define MYCODE_CJULIANDATE_H_ #include <string> /** * Diese Klasse repräsentiert ein Julianisches Datum ohne Uhrzeit. */ class CJulianDate { private: long m_days; /** * Formatiert die übergebene Tagesnummer (1-31) wie folgt: Ist die Zahl * einstellig, wird ein Leerzeichen vorangestellt (3 --> " 3"). Stimmt * die Zahl mit dem Tag des von diesem Objekt repräsentierten * gregorianischen Datums überein, wird das Ergebnis mit eckigen * Klammern umgeben ("10" --> "[10]"), sonst werden am Anfang und * am Ende je ein Leerzeichen ergänzt ("10" --> " 10 "). */ std::string formatDayNumber (short day) const; public: /** * Erzeugt ein neues Objekt mit dem angegebenen Julianischen Datum. */ CJulianDate(long date = 0); /** * Erzeugt ein neues Objekt, dessen Wert aus dem angegebene Gregorianische Datum * berechnet wird. * * - year: das Jahr * - month: der Monat (Januar = 1) * - day: der Tag (erster Tag eines Monats: 1) */ CJulianDate(int year, short month, short day); /** * Liefert das Julianische Datum (Tage seit dem 1. Januar -4712 (4713 v. Chr)). */ long getJulianDate() const; /** * Übernimmt das angegebene Julianische Datum. */ void setJulianDate(long date); /** * Liefert den aktuallen Wert als Gregorianisches Datum. * * - year: das Jahr * - month: der Monat (Januar = 1) * - day: der Tag (erster Tag eines Monats: 1) */ void toGregorianDate(int& year, short& month, short& day) const; /** * Konvertiert und übernimmt das angegebene Gregorianische Datum. * * - year: das Jahr * - month: der Monat (Januar = 1) * - day: der Tag (erster Tag eines Monats: 1) */ void fromGregorianDate(int year, short month, short day); /** * Liefert den Wochentag zu dem aktuellen Datum (Montag = 1). */ int dayOfWeek() const; /** * Liefert den Namen des Wochentags zu dem aktuellen Datum (Montag = 1). */ std::string dayOfWeekAsName() const; /** * Addiert die angegebene Anzahl Tage zu diesem Julianischen Datum hinzu. */ CJulianDate& operator+= (long days) { m_days += days; return *this; } /** * Vergleicht zwei Julianische Daten und liefert true, wenn das als * linker Operand angegebene Datum vor dem als rechter Operand * angegebenen liegt. */ bool operator< (const CJulianDate& rhs) const; }; #endif /* MYCODE_CJULIANDATE_H_ */
#include "CJulianDate.h" #include <cstdio> //=============================================== // Ergänzen Sie Ihren Code am Ende dieser Datei! //=============================================== CJulianDate::CJulianDate(long date) { m_days = date; } CJulianDate::CJulianDate(int year, short month, short day) { fromGregorianDate(year, month, day); } long CJulianDate::getJulianDate() const { return m_days; } void CJulianDate::setJulianDate(long date) { m_days = date; } void CJulianDate::toGregorianDate(int& year, short & month, short & day) const { long i, j, k, l, n; l = m_days + 68569; n = 4 * l / 146097; l = l - (146097 * n + 3) / 4; i = 4000 * (l + 1) / 1461001; l = l - 1461 * i / 4 + 31; j = 80 * l / 2447; k = l - 2447 * j / 80; l = j / 11; j = j + 2 - 12 * l; i = 100 * (n - 49) + i + l; year = i; month = j; day = k; } void CJulianDate::fromGregorianDate(int year, short month, short day) { m_days = day - 32075 + 1461 * (year + 4800 + (month - 14) / 12) / 4 + 367 * (month - 2 - (month - 14) / 12 * 12) / 12 - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4; } int CJulianDate::dayOfWeek() const { return (m_days % 7) + 1; } std::string CJulianDate::dayOfWeekAsName() const { switch (dayOfWeek()) { case 1: return "Montag"; case 2: return "Dienstag"; case 3: return "Mittwoch"; case 4: return "Donnerstag"; case 5: return "Freitag"; case 6: return "Samstag"; case 7: return "Sonntag"; default: return "(Fehler)"; } } std::string CJulianDate::formatDayNumber(short day) const { char buffer[5]; int year; short month; short refDay; toGregorianDate(year, month, refDay); sprintf(buffer, day == refDay ? "[%2d]" : " %2d ", day); return std::string(buffer); } bool CJulianDate::operator <(const CJulianDate& rhs) const { return m_days < rhs.m_days; } //===================================================== // Ergänzen Sie Ihren Code unterhalb dieses Kommentars //=====================================================
Habe das Im Header implementiert für die a)
ostream& operator << (ostream& lop, const CJulianDate& rhs); };
in der cpp
ostream& operator << (ostream& lop, const CJulianDate& rhs){ lop<< rhs.dayOfWeek() << " , " << rhs.formatDayNumber(short day) << " ." endl; }
Es gibt ja viele ?
Kommentar