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();
    }
    

Anmelden zum Antworten