Programmieren mit C++

Code-Beispiele & Lösungen

Klassen für allgemeine Aufgaben

Die Klasse für Datumsfunktionen

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





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 01:43:05 von textarchiv.alojado.de