Kopierkonstruktor und Operator einer eigenen Klasse für Pointer überladen
-
Hallo,
ich hab eine eigene Klasse und möchte den Kopierkonstruktor und den operator= für
Pointer der Klasse überladen, weiss aber nicht wie.Es soll ausseh wie etwas in der Richtung:
class Klasse { public: private: int* wert; }; int main() { Klasse* k1=new Klasse; Klasse* k2(k1); //den moecht ich ueberladen k2=k1; //und den. return 0; }
Ich hab's schon mit Klasse(const Klasse* rhs) versucht, um den Kopierkonstruktor zu
überladen, hat aber nicht funktioniert, wie alle Versuche bis her.Weiss jemand wie?
-
Geht nicht.
Du kannst lediglich eine Klasse schreiben, die sich wie ein Pointer verhält - aber keinen Pointer ansich.
-
Mist. Ich wollte diese Operatoren in private unterbringen, damit Benutzer meiner Klasse sie nicht verwenden können. Tja, dumm gelaufen.
Danke für die Info.
-
class Klasse { private: Klasse(const Klasse& rhs); //für Klasse* k2 = new Klasse(k1); Klasse& operator=(const Klasse& rhs); //für k2 = k1; };
Oder habe ich das jetzt falsch verstanden?
Edit: Hups, viele Tippfehler... (Teil 2)
-
Ja, falsch verstanden.
Aber dein Beispiel funktioniert sowieso nicht.
Es sei denn man schreibt (*k1)=(*k2);
Aber das war nicht das was ich wollte.
-
[cpp]
Klasse &operator=(const Klasse& rhs); //für *k2 = *k1;
[/cpp]
-
Ich weiss schon, aber es nicht das was ich will.
In deinem Beispiel werden nur die Adressen kopiert, was ich aber nicht gebrauchen kann. Im operator= selbst sollte nämlich neuer Speicher für das Element 'wert' alloziert werden.
-
ähm nein? da werden keine addressen kopiert? weil referenzen keine addressen haben?
-
Die Adressen für die Membervariablen
, hier 'wert'.
wert=rhs.wert;
-
Nachtrag: Shade of Mine hat gleich verstanden was ich meine.
-
was soll denn am ende rauskommen,
worauf soll bei k1(k2) k1 zeigen?
was soll bei k2=k1 passieren?
oder willst du einfach verhindern, dass die user k2(k1) oder k2=k1 schreiben? denn das geht nicht
alternativ kannst du aber den operator &() überladen, sodass er nurnoch einen smartpointer zurückgibt, und den kann man keinem klasse* pointer zuweisen