Hallo zusammen!
Bei mir hat sich in meinem Quelltext ein Problem eingesessen, was sich
mir nicht erschließt. Ich möchte gerne in C++ eine Klasse erstellen, die
auch vererben kann und einen Vergleichsoperator "a < b" besitzt. Diesen
habe ich wie folgt geschrieben:
Inhalt der *.h
1 | class CLCObject {
|
2 | //foo
|
3 | public:
|
4 | virtual bool operator < (CLCObject& rhs);
|
5 |
|
6 | private:
|
7 | //bar
|
8 | };
|
Inhalt der *.cpp
1 | // foo
|
2 | bool CLCObject::operator<(CLCObject& rhs) {
|
3 | // getLaps() und getLastTime() geben Variablenwerte
|
4 | // des jeweiligen Objekts in int bzw. double zurück
|
5 | if(this->getLaps() >= rhs.getLaps())
|
6 | return false;
|
7 | if(this->getLastTime() < rhs.getLastTime())
|
8 | return true;
|
9 | return false;
|
10 | }
|
11 | //bar
|
Wenn ich nun die Membervariablen verändere, auf die getLaps() und
getLastTime() zugreifen, sollten sich beim Vergleich die Aussagen der
Operatoren verändern können. Das tun sie leider nicht.
Eine einfache Anwendung wie
1 | CLCObject* a;
|
2 | CLCObject* b;
|
3 | a.setLaps(int);
|
4 | b.setLaps(another int);
|
5 | if(a < b)
|
6 | // foobar
|
ergibt immer den gleichen Wahrheitswert, obwohl die Werte nach
eigentlichem händischen Auslesen andere Aussagen erzeugen.
Im Debugmodus (Ich nutze Qt-Designer) habe ich einen Breakpoint in den
Operator herein geladen. Dieser wird allerdings nicht ausgeführt, so
dass ich anscheinend in den Vergleich nicht hineingerate.
Habe ich in der Implementierung etwas falsch gemacht?
Besten Dank für jegliche Antworten!
Thomas