Problem mit Klasse und Operator Overloading
-
Hi,
hab hier ein kleines Problem. Ich möchte 2 Uhrzeiten addieren und habe schon folgendes Programm:#include <iostream> #include <conio.h> using namespace std; class normalzeit { private: int stunden; int minuten; public: normalzeit (int h=0, int m=0) : stunden(h), minuten(m) { } void ausgabe(); normalzeit operator + (const normalzeit& x); }; void normalzeit::ausgabe() { cout<<stunden <<":"<<minuten<<" Uhr"<<endl; } void main() { normalzeit uhr; normalzeit a(12,15), b(11,19); normalzeit c; a.ausgabe(); b.ausgabe(); c.ausgabe(); }Es sollen die Summe zweier normalzeit Objekte (mit Stundenübertrag bei Minuten >= 60) gebildet werden und in der c.ausgabe() ausgegeben werden. Hat jemand hier vielleicht ein paar Tips für mich.
Viele Grüße
Claus
-
Claus12 schrieb:
Hi,
hab hier ein kleines Problem. Ich möchte 2 Uhrzeiten addieren und habe schon folgendes Programm:Angepasst, aber deine Aufgabe nicht gänzlich gelöst...
#include <iostream> #include <conio.h> // Unportabel, und noch nicht verwendet... using namespace std; // Bitte vorsichtig hiermit umgehen: Niemals in Headern // Einheitliche Einrückung wäre auch ganz gut zum lesen, ich habe mal meinen // Platzverschwenderischen Stil verwendet, aber hauptsache: Bleib einheitlich... class normalzeit { private: int stunden; int minuten; public: normalzeit( int stunden=0, // nicht wundern: Ich habe was gegen kryptische int minuten=0) // abkürzungen; Nach einen 1/2 Jahr nicht mehr lesbar... : stunden(stunden), minuten(minuten) { } void ausgabe(); // Wer den operator+ definiert, sollte immer auch += definieren. // Ersteres löse ich in der Regel auserhalb der Klasse und verwende // intern letzteren... normalzeit& operator+=( normalzeit const & zeit); }; normalzeit normalzeit::operator+=( normalzeit const & zeit) { // <= Hier addierst du die Argumente unter Prüfung eines Überlaufes auf // Sprich: stunden += zeit.stunden; ... return *this; } void normalzeit::ausgabe() { cout << stunden << ":" << minuten << " Uhr" << endl; } normalzeit operator+( normalzeit const & zeitLinks, normalzeit const & zeitRechts) { normalzeit ergebnis = zeitLinks; // Kopierkonstruktor ergebnis += zeitRechts; // operator+= return ergebnis; } int main() // Es gibt kein "void main()" { normalzeit a(12,15); normalzeit b(11,19); normalzeit c = a + b; // Dann ruf doch auch die Addition auf... a.ausgabe(); b.ausgabe(); c.ausgabe(); }