000
06.05.2007, 23:23 Uhr
Spion
|
C++: |
Tageszeit-Quellcode_V2.doc Seite 1 // Anwendung "Tageszeit" // Struktur-Datenobjekte erzeugen, // ihre Membervariablen setzen und drucken. #include <iostream> using std::cout; using std::endl; // Deklaration des neuen Typs Time // als Datenstruktur struct Time { int hour; // 0-23 int minute; // 0-59 int second; // 0-59 }; void print24hFormat( Time ); // Fkt-Prototyp void print12hFormat( Time ); // Fkt-Prototyp int main() { // Die folgenden Anweisungen müssen geändert werden, wenn statt // struct Time der Datentyp class Time verwendet wird // Deklaration einer Strukturvariablen des neuen Typs struct Time begin; //ohne Initialisierung! // Membervariable initialiseren begin.hour = 18; begin.minute = 5; begin. second = 0; cout << "Abendessen ist um "; print24hFormat( begin ); cout << " im 0-24h Format,\nbzw. "; print12hFormat( begin ); cout << " im 0-12h Format.\n"; // Anwender setzt Membervariable auf ungültige Werte struct Time crazyTime; crazyTime.hour = 29; crazyTime.minute = 73; crazyTime.second = 105; cout << "\nVerrückte Zeit: "; print24hFormat( crazyTime ); cout << endl; // Noch ein Time-struct erzeugen struct Time end = { 20, 14, 10 }; // ---------------------------------------------------------------------- // Die folgenden Anweisungen kompilieren nur, wenn in der // Klasse Time die geforderten Erweiterungen implementiert sind. Time end; end.setHMS( 24, 14, 10 ); int durationInSeconds = getDurationInSeconds( begin, end ); cout << "Das Abendessen dauert " << durationInSeconds << " Sekunden." << endl; durationInSeconds = end.getTimeInSeconds() - begin.getTimeInSeconds(); Time duration; duration.setS( durationInSeconds ); cout << "Das Abendessen dauert "; duration.print24hFormat(); cout << endl; return 0; } // end main Tageszeit-Quellcode_V2.doc Seite 2 // Die nachfolgenden Funktionsdefinitionen sind in Methodendefinitionen // der Klasse Time umzuwandeln. void print24hFormat ( Time t ) { // Zeit im 0-24h Format ausgeben cout << ( t.hour < 10 ? "0" : "" ) << t.hour << ":" << ( t.minute < 10 ? "0" : "" ) << t.minute << ":" << ( t.second < 10 ? "0" : "" ) << t.second; } void print12hFormat ( Time t ) { // Zeit im 0-12h Format ausgeben cout << (( t.hour==0 || t.hour==12 ) ? 12 : t.hour % 12 ) << ":" << ( t.minute < 10 ? "0" : "" ) << t.minute << ":" << ( t.second < 10 ? "0" : "" ) << t.second << ( t.hour < 12 ? " AM" : " PM" ); }
|
AUFGABE:
Klasse - Tageszeit In der Vorlesung wurde der benutzerdefinierte Datentyp Time als Datenstruktur deklariert und in der Anwendung "Tageszeit" verwendet. Ändern Sie die Anwendung "Tageszeit" in eine objekt-orientierte Anwendung: a) Beginnen Sie den Entwurf mit dem UML-Klassendiagramm. b) Deklarieren und implementieren Sie danach parallel zur Anwendung die Klasse Time mit dem Klassengenerator von Visual C++. Stellen Sie sicher, dass Sie jederzeit ein lauffähiges Anwendungssystem haben. c) Implementieren Sie die Methoden print24hFormat, print12hFormat mit der gleichen Funktionalität wie in der Anwendung "Tageszeit". d) Ergänzen Sie die Klasse Time, um die Methode getTimeInSeconds und die Methode setS, die die seit Mitternacht verstrichene Zeit in Sekunden übergeben bekommt, daraus die aktuelle Zeit errechnet und in den Membervariablen ablegt, und die Methode void setHMS(int h, int m, int s) e) Erweitern Sie Ihr Projekt um die Funktion int getDurationInSeconds(Time begin, Time end). Überlegen Sie, in welchen Dateien der Quellcode enthalten sein sollte. Fügen Sie Zugriffsmethoden wie z.B. int getHour() hinzu, falls erforderlich. f) Erweitern Sie die Klasse um eine Funktionalität Ihrer Wahl. Besonderheiten der Klasse Zeit: In der statischen Membervariablen numberOfTimeObjects erfasst die Klasse die Anzahl der vom Programm verwalteten Time-Objekte. Bei jedem Erzeugen und Zerstören eines Time-Objektes gibt dieses die aktualisierte Objektanzahl auf dem Bildschirm aus. Hinweis: Dafür, dass scheinbar mehr Objekte zerstört als erzeugt werden, gibt es (später in der Vorlesung) eine einfache Erklärung.
Ich danke euch für jede Hilfe |