Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

c++: frage zum überladen von operatoren

Yves3 / 9 Antworten / Flachansicht Nickles

hallo


ich habe eine frage zu diesem quellcode.


wozu wird der zeiger "this" zurück gegeben? ich testete das programm ohne rückgabe dieses zeigers und es funktionierte auch. dann wies ich zum test das objekt "wiskers" sich selbst zu. darauf wurde für sein alter irgend eine ziemlich hohe negative zahl ausgegeben. warum das?


es geht ja eigentlich darum, den speicher nicht zu löschen, wenn das objekt fälschlicherweise sich selbst zugewiesen wird. wozu braucht es da einen rückgabewert?


und wozu wird bei normalem ablauf der dereferenzierte zeiger "this" zurück gegeben? "itsAge" und "itsWeight" sind ja zeiger auf den heap. da muss man doch eigentlich auch nichts mehr zurück geben, oder?


kann mir das jemand erklähren?  hab ich etwas grundlegendes falsch verstanden?


danke für die hilfe!!


#include <iostream.h>


class CAT
{
public:
 CAT();
 int GetAge() const { return *itsAge; }
 int GetWeight() const { return *itsWeight; }
 void SetAge(int age) { *itsAge = age; }
 CAT& operator=(const CAT &);


private:
 int *itsAge;
 int *itsWeight;
};


CAT::CAT()
{
 itsAge = new int;
 itsWeight = new int;
 *itsAge = 5;
 *itsWeight = 9;
}



CAT& CAT::operator =(const CAT & rhs)
{
 if(this == &rhs)
  return * this;
 delete itsAge;
 delete itsWeight;
 itsAge = new int;
 itsWeight = new int;
 *itsAge = rhs.GetAge();
 *itsWeight = rhs.GetWeight();
 return *this;
}



int main()
{


 CAT frisky;
 cout << "Alter von Frisky: " << frisky.GetAge() << endl;
 cout << "Alter von Frisky auf 6 setzen...\n";
 frisky.SetAge(6);
 CAT wiskers;
 cout << "Alter von Wiskers: " << wiskers.GetAge() << endl;
 cout << "Frisky auf Wiskers kopieren...\n";
 wiskers = frisky;
 cout << "Alter von Wiskers: " << wiskers.GetAge() << endl;
 return 0;
}


 

bei Antwort benachrichtigen
Yves3 thomas woelfer „ich glaube ich verstehe deine frage nicht so ganz: GetAge hat ueberhaupt...“
Optionen

meine frage hatte eigentlich auch nichts mit "GetAge" zu tun.
es ging nur darum, dass "itsAge" ein zeiger ist und der wert eben mit diesen codezeilen "*itsAge = rhs.GetAge(); *itsWeight = rhs.GetWeight();" bereits angepasst wurde. da die daten im heap abgelegt sind, bräuchte es(nach meiner überlegung) eigentlich keinen rückgabewert mehr.

zu diesem thema fragte ich, ob die rückgabe des zeigers "this"

a: zur syntax gehört
b: zum guten programmierstil gehört, aber nicht zwingend notwendig ist
c: etwas zurückgeben muss, weil es so deklariert wurde und man den
rückgabewert braucht, wenn "if" "true" ergibt.
oder d:(was sonst?)

weisst du jetzt, was ich meine?

gruss yves

Ps: das programm ist aus einem buch. es geht darum das überladen des operators "=" zu demonstrieren. im buch wurde extra erwähnt, dass das programm in der praxis nie so sein wird ;-)

bei Antwort benachrichtigen