|
Datumsfunktionen sind eine der am häufigsten benötigten Arten von Funktionen; ob man nun in einer wirtschaftlichen Anwendung eine nach Kalenderwochen unterteilte Statistik, in einem Meßprogramm ein mit Datumsstempel versehenes Meßprotokoll oder in der privaten Adreßverwaltung das Geburtsdatum eines Bekannten mit dem zugehörigen Wochentag versehen will: Datumsfunktionen sind das A und O jeder leistungsfähigen Anwendung.
| Einführung |
|
Die im folgenden vorgestellte Datumsklasse unterteilt sich grob in zwei Teile: die Datumsklasse selbst und die darauf anzuwendenden Operatoren. Daneben gibt es noch vier Funktionen zum Bestimmen des aktuellen Datums/Tags/Monats/Jahrs, die es sich zunutze machen, daß C++ eine hybride Sprache ist, in der nicht alle Funktionen Teil einer Klasse sein müssen.
| Datumsklasse |
|
Die Datumsklasse selbst besitzt 3 öffentliche Datenelemente:
char datum::tag
char datum::monat
int datum::jahr
Auf sie kann in einem Programm direkt zugegriffen werden:
| Öffentliche Datenelemente |
#include
#include
void demo() {
datum datum(4,7,1970);
cout << (int)datum.tag << ".";
cout << (int)datum.monat << ".";
cout << datum.jahr << endl;
}
| Beispielaufruf |
|
Die hier vorgestellte Datumskasse wurde mit Borland C++ 3.1 erstellt und getestet, läuft aber auch mit neueren Versionen des Compilers.
Die Elementfunktionen
Im folgenden werden die Elementfunktionen der Klasse datum und die zugehörigen Operatoren im Detail beschrieben.
| Hinweis |
datum()
Initialisiert das Objekt und setzt die Datenelemente des Objekts auf 0.
| Konstruktor datum |
datum(char *datumsstring);
Diese Form des Konstruktors setzt die Datenelemente des Objekts entsprechend dem übergebenen Datumsstring.
| Konstruktor datum |
datum(char tag, char monat, int jahr)
Setzt die Datenelemente des Objekts entsprechend den übergebenen numerischen Werten.
| Konstruktor datum |
void operator = (char *datumsstring)
Der überladene Operator setzt die Datenelemente des Objekts entsprechend dem übergebenen Datumsstring.
| Zuweisungs-operator |
void operator = (long int datumswert)
Dieser überladene Operator setzt die Datenelemente des Objekts entsprechend dem übergebenen numerischen Wert.
Der Datumswert wird folgendermaßen ermittelt
tag + 100 * monat + 100 * 100 * jahr.
Diese Form der Zuweisung wurde in erster Linie konzipiert, um ein datum-Objekt auf 0 setzen zu können.
| Zuweisungs-operator |
char *string()
Wandelt das Datum des Objekts in einen String (tt.mm.jjjj) um und liefert einen Zeiger auf einen Datumsstring zurück.
String() bildet aus den Datenelementen datum::tag, datum::monat und datum::jahr einen String der Form tt.mm.jjjj. Dieser wird in ein statisches Datenelement der Klasse datum geschrieben. Das hat zur Folge, daß der String auch dann noch in einem gültigen Speicherbereich steht, wenn der Gültigkeitsbereich des jeweiligen Objekts schon längst verlassen wurde. Nachteil dieser Methode ist es aber, daß alle Instanzen der Klasse datum denselben Speicherbereich zum Speichern ihrer Strings verwenden und sich somit gegenseitig das Ergebnis überschreiben können. Es sollte also nach Möglichkeit das Ergebnis dieser Funktion direkt ausgewertet oder, wenn dies nicht möglich ist, in einen anderen Speicherbereich umkopiert werden. Gewählt wurde dieser Weg primär, um den Speicherbedarf für eine Instanz der Klasse datum so gering wie möglich zu halten.
| Elementfunktion string |
char *string_kurz()
string_kurz wandelt das Datum des Objekts in einen String (tt.mm.jj) um und liefert einen Zeiger auf einen Datumsstring zurück, wobei hier im Gegensatz zur Funktion string() nur ein String des Formats tt.mm.jj erzeugt wird.
| Elementfunktion string_kurz |
char *string_ausgabe()
Die Elementfunktion string_ausgabe wandelt das Datum des Objekts in einen String (mm/jj) um und liefert einen Zeiger auf einen Datumsstring im Format mm/jj zurück.
| Elementfunktion string_ausgabe |
Tag wochentag()
wochentag() ermittelt den Wochentag, der zum im jeweiligen Objekt gespeicherten Datum gehört. Das Ergebnis wird als Element des Aufzählungstyps Tag zurückgeliefert, der folgendermaßen definiert ist:
enum Tag { _Montag = 1, // = 1
_Dienstag, // = 2
_Mittwoch, // = 3
_Donnerstag, // = 4
_Freitag, // = 5
_Samstag, // = 6
_Sonntag // = 7
};
| Elementfunktion wochentag |
void des_angegebenen_tags(Tag wochentag)
des_angegebenen_tags ermittelt das Datum des nächsten Wochentags, der dem übergebenen Wochentag entspricht.
| Elementfunktion des_angegebenen_tags |
int kalenderwoche()
kalenderwoche() ermittelt die Kalenderwoche des im Objekt gespeicherten Datums.
| Elementfunktion kalenderwoche() |
void jahresanfang()
jahresanfang() ermittelt das Datum des ersten Tags im Jahr. Die Funktion selbst liefert kein Ergebnis zurück, sondern das erfragte Datum muß bei Bedarf abgerufen werden.
| Elementfunktion jahresanfang |
void monatsanfang()
monatsanfang ermittelt das Datum des ersten Tags im Monat.
| Elementfunktion monatsanfang |
void jahresende()
jahresende() ermittelt das Datum des letzten Tags im Jahre.
| Elementfunktion jahresende() |
void monatsende()
monatsende() ermittelt das Datum des letzten Tags im Monat.
| Elementfunktion monatsende() |
Syntax: int operator ! (datum datum)
Der überladene Operator logisches NOT liefert 1, wenn das Datum korrekt und dabei ungleich 00.00.0000 ist, sonst 0.
| Operator logisches NOT |
int operator == (datum datum_1,
datum datum_2)
Der überladene Operator vergleicht zwei Datumsangaben und liefert 1, wenn beide Daten übereinstimmen, sonst 0.
| Operator Vergleich |
int operator == (datum datum,
long int datumswert)
Dieser überladene Operator vergleicht ein Datum mit einem Datumswert und liefert 1, wenn der Datumswert des übergebenen Datums gleich dem Datumswert ist, der übergeben wurde. Diese Funktion wurde primär implementiert, um ein Datum mit 0 vergleichen zu können, das heißt, um herauszufinden, ob das Datum „leer“ ist.
| Operator Vergleich |
int operator != (datum datum_1,
datum datum_2)
Dies ist ebenfalls ein überladener Operator, der zwei Daten auf Ungleichkeit überprüft. Wenn die beiden Daten nicht übereinstimmen, resultiert 1, sonst 0.
| Operator Vergleich |
operator != (datum datum, long int datumswert)
Dieser überladene Operator vergleicht ein Datum mit einem Datumswert und liefert 1, wenn der Datumswert des übergebenen Datums ungleich dem Datumswert ist, der übergeben wurde. Diese Funktion wurde primär implementiert, um ein Datum mit 0 vergleichen zu können, das heißt, um herauszufinden, ob das Datum nicht „leer“ ist.
| Operator Vergleich |
int operator (datum datum_1, datum datum_2)
Der Operator „<“ wurde überladenen, damit er zwei Daten miteinander vergleichen kann. Er liefert 1, wenn das erste übergebene Datum kalendarisch kleiner ist als das zweite, sonst 0.
| Operator kleiner als |
int operator <= (datum datum_1,
datum datum_2)
Der überladene Operator „<=“ liefert 1, wenn das erste übergebene Datum kalendarisch kleiner oder gleich dem zweiten ist, sonst 0.
| Operator kleiner gleich |
int operator > (datum datum_1, datum datum_2)
Der überladene Operator „>“ liefert 1, wenn das erste übergebene Datum kalendarisch größer ist als das zweite, sonst 0.
| Operator größer als |
int operator >= (datum datum_1,
datum datum_2)
„>=“ liefert 1, wenn das erste übergebene Datum kalendarisch größer oder gleich dem zweiten ist, sonst 0.
| Operator größer gleich |
void operator ++ (datum &datum, int wert)
Ermittelt das Datum des nächsten Tags. Hierbei handelt es sich um diejenige Variante des Operators ++, die nach dem Wert, auf den er sich bezieht, geschrieben wird.
| Operator inkrement |
void operator -- (datum &datum, int wert)
Ermittelt das Datum des vorhergehendes Tags. Hierbei handelt es sich um diejenige Variante des Operators --, die nach dem Wert, auf den er sich bezieht, geschrieben wird.
| Operator dekrement |
datum operator + (datum datum, int wert)
Der überladene Additionsoperator ermittelt das Datum desjenigen Tags, der um n Tage weiter liegt.
| Operator plus |
datum operator - (datum datum, int wert)
Der Operator minus ermittelt das Datum desjenigen Tages, der um n Tage vorher liegt.
| Operator minus |
void operator += (datum &datum, int wert)
Ermittelt das Datum desjenigen Tags, der um n Tage weiter liegt.
| Operator plus |
void operator -= (datum &datum, int wert)
Ermittelt das Datum desjenigen Tages, der um n Tage vorher liegt.
| Operator minus |
int operator - (datum datum_1, datum datum_2)
Dieser überladene Operator ermittelt die Anzahl der Tage, die zwischen den zwei übergebenen Daten liegen, und liefert diesen Wert als Ergebnis.
Funktionen
| Operator Differenz |
datum aktuelles_datum()
Die außerhalb der Klasse datum definierte Funktion aktuelles_datum() ermittelt das aktuelle Systemdatum und liefert dieses als Funktionsergebnis vom Typ datum zurück.
| Funktion aktuelles_datum |
int aktueller_tag()
aktueller_tag() ist außerhalb der Klasse datum definiert und ermittelt den Tageswert des aktuellen Datums.
| Funktion aktueller_tag |
int aktueller_monat()
aktueller_monat ermittelt den Monatswert des aktuellen Datums und entspricht somit der Elementfunktion monat.
| Funktion aktueller_monat |
int aktuelles_jahr()
Die Funktion aktuelles_jahr() ist ebenfalls außerhalb der Klasse datum definiert und ermittelt den Jahreswert des aktuellen Datums, was der Elementfunktion jahr entspricht.
| Funktion aktuelles_jahr
|