2016-11-15 5 views
0

Ich habe diese halb geschriebene Klasse gegeben.Mit überladenen Operatoren an Zeiten

using namespace std; 

#include <iostream> 
#include <iomanip> 
#include "Time.h" 

Time::Time() 
{ hour = min = sec = 0; 
} 

Time::Time(int h, int m, int s) 
{ setTime(h, m, s); 
} 

void Time::setTime(int h, int m, int s) 
{ hour = (h>=0 && h<24) ? h : 0; 
    min = (m>=0 && m<60) ? m : 0; 
    sec = (s>=0 && s<60) ? s : 0; 
} 

Time& Time::operator+=(unsigned int n) 
{ sec += n; 
    if (sec >= 60) 
    { min += sec/60; 
    sec %= 60; 
    if (min >=60) 
    { hour = (hour + min/60) % 24; 
     min %= 60; 
    } 
    } 
    return *this; 
} 

Time Time::operator+(unsigned int n) const 
{ Time tCopy(*this); 
    tCopy += n; 
    return tCopy; 
} 

Time& Time::operator++()  // prefix version 
{ *this += 1; 
    return *this; 
} 

Time Time::operator++(int n) // postfix version 
{ Time tCopy(*this); 
    *this += 1; 
    return tCopy; 
} 

ostream& operator<<(ostream &o, const Time &t) 
{ o << setfill('0') << setw(2) << t.hour << ':' << setw(2) << t.min << ':' << setw(2) << t.sec; 
    return o; 
} 

und diese Header-Datei,

// using _TIMEX_H_ since _TIME_H_ seems to be used by some C++ systems 

#ifndef _TIMEX_H_ 
#define _TIMEX_H_ 

using namespace std; 

#include <iostream> 

class Time 
{ public: 
    Time(); 
    Time(int h, int m = 0, int s = 0); 
    void setTime(int, int, int); 
    Time operator+(unsigned int) const; 
    Time& operator+=(unsigned int); 
    Time& operator++(); // postfix version 
    Time operator++(int); // prefix version 

    // new member functions that you have to implement 

    Time operator-(unsigned int) const; 
    Time& operator-=(unsigned int); 
    Time& operator--();  // postfix version 
    Time operator--(int); // prefix version 

    bool operator==(const Time&) const; 
    bool operator<(const Time&) const; 
    bool operator>(const Time&) const; 

    private: 
    int hour, min, sec; 

    friend ostream& operator<<(ostream&, const Time&); 

    // new friend functions that you have to implement 

    friend bool operator<=(const Time&, const Time&); 
    friend bool operator>=(const Time&, const Time&); 
    friend bool operator!=(const Time&, const Time&); 

    friend unsigned int operator-(const Time&, const Time&); 
}; 

#endif 

Ich glaube, ich kann die anderen Bedienfunktionen und die Freund-Funktionen implementieren, aber ich habe Probleme, eine main-Methode zu schreiben, wie das funktioniert zur Zeit zu testen, ich Ich habe gerade erst begonnen, C++ zu lernen, und ich habe wirklich Probleme damit, also entschuldige mich dafür, dass ich keine Ahnung habe, wie ich das schreiben soll. Danke im Voraus.

+0

Es ist schwer zu verstehen, warum diese Funktionen (außer '' '' ') Freunde wären, da sie vollständig über die öffentliche Schnittstelle implementiert werden können. – molbdnilo

+0

Ich denke, es ist so, dass wir zeigen können, dass wir beide Arten von Funktionen implementieren können ... – Chaz

Antwort

1

Es ist nichts besonderes, die überlasteten Operatoren zu testen. Nur 2 Objekte in Haupt machen und so etwas schreiben:

Time t1(10,20,30),t2(1,2,3); 

nun zur Überprüfung + = Operators, schreiben:

t1+=10; 

wird Ihre überladene Funktion automatisch aufgerufen werden, können Sie auch Fügen Sie anstelle einer Zahl 2 Objekte hinzu:

t1+=t2; 

Der einzige Unterschied besteht darin, dass der Parameter anstelle eines in t, wird es ein Objekt des Typs Time sein.

Für die < < Betreiber Überprüfung, schreiben Sie einfach:

cout<<t1; 

und der Rest wird von der Friend-Funktion behandelt werden.

Hoffe, das hilft.

Verwandte Themen