PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : operator= und operator== klappt nicht...



SeeksTheMoon
19-08-2005, 18:37
Ich habe folgende Klasse:


class wsDimension {
private:
int height;
int width;
public:
bool operator==(const wsDimension& d);
wsDimension& operator=(const wsDimension& d);
};

und folgende Implementierung:


bool wsDimension::operator==(const wsDimension& d) {
if(width == d.getWidth() && height == d.getHeight())
return true;
return false;
}

wsDimension& wsDimension::operator=(const wsDimension& d) {
width = d.getWidth();
height = d.getHeight();
return *this;
}

die getter sind auch vorhanden.

Der g++ meldet mir:


src/common/ws/wsDimension.cpp:61: Fehler: Die Übergabe von »const wsDimension« als »this«-Argument von »int wsDimension::getWidth()« streicht Qualifizierer
src/common/ws/wsDimension.cpp:61: Fehler: Die Übergabe von »const wsDimension« als »this«-Argument von »int wsDimension::getHeight()« streicht Qualifizierer
src/common/ws/wsDimension.cpp: In member function `wsDimension& wsDimension::operator=(const wsDimension&)':
src/common/ws/wsDimension.cpp:67: Fehler: Die Übergabe von »const wsDimension« als »this«-Argument von »int wsDimension::getWidth()« streicht Qualifizierer
src/common/ws/wsDimension.cpp:68: Fehler: Die Übergabe von »const wsDimension« als »this«-Argument von »int wsDimension::getHeight()« streicht Qualifizierer

spinnt der? Der Code ist doch in Ordnung!?

SeeksTheMoon
19-08-2005, 18:41
hab rausgefunden dass man den getter nicht verwenden darf, sondern direkt den member nimmt, also d.width statt d.getWidth(). Wo ist da bitte die Logik bei?
Der getter muss klappen und auf den Member darf man wegen private ncht direkt zugreifen

locus vivendi
19-08-2005, 18:42
Sind denn getWidth() und getHeight() auch wirklich const-qualifiziert?

panzi
19-08-2005, 19:32
spricht getWidth muss so aussehn:

int getWidth() const {
return this->width;
}

Joghurt
20-08-2005, 01:05
Und noch ein weiterer Tipp:


if(width == d.getWidth() && height == d.getHeight())
return true;
return false;
schreibt man besser als

return (width == d.getWidth() && height == d.getHeight())

SeeksTheMoon
20-08-2005, 09:36
aaah, das const vergesse ich doch immer wieder :D
Vielen Dank (auch für das if-Einsparen)

Joghurt
20-08-2005, 12:12
aaah, das const vergesse ich doch immer wieder :D Auch bei operator== das const nicht vergessen ;)

locus vivendi
20-08-2005, 13:31
Dann gebe ich auch noch einen Tipp dazu, und zwar wird gemeinhin empfohlen, binäre Operatoren (also z.B. == ) nicht in der Klasse zu überladen, sondern als "freie" Funktionen. Eine Begründung dafür kann z.B. hier nachgelesen werden:
http://www.icce.rug.nl/documents/cplusplus/cplusplus09.html
(Punkt 9.6)

anda_skoa
20-08-2005, 15:08
auf den Member darf man wegen private ncht direkt zugreifen

Das spielt in diesem Fall keine Rolle, weil beide Objekte von der selben Klasse sind und die Klasse immer Zugriff auf private hat.

Ciao,
_