copy constructor access private member?
-
class Rational { private: int numerator; int denominator; public: Rational(int numerator, int denominator=1) : numerator(numerator), denominator(denominator) {} Rational(Rational const& other) : numerator(other.numerator), denominator(other.denominator) {} ... }hier
numerator(other.numerator), denominator(other.denominator)wie kann man von einer Instanz aus, die privaten member von anderer Instanz zugreifen?
-
Hi,
gar nicht und das ist auch der Sinn von private.
Schreib dir am besten eine get Methode die eine const Referenz auf das
gewünschte Element zurückgibt.class foo { private: FOO myPrivateVar; public: const FOO& getPrivateVar( void ) const; }; const FOO& foo::getPrivateVar( void ) const { return( myPrivateVar ); }Eine Alternative wäre auch noch
friendwobei sich das in 99.999% aller Fälle besser lösen lässt.
-
netrobot schrieb:
hier
numerator(other.numerator), denominator(other.denominator)wie kann man von einer Instanz aus, die privaten member von anderer Instanz zugreifen?
ist das die Frage oder die Antwort?
-
fooFoofoo schrieb:
gar nicht und das ist auch der Sinn von private.
Denkst du. Es geht, weil es die gleiche Klasse ist.
-
numerator(other.numerator), denominator(other.denominator) this->numerator = other.numerator // why no error?numerator ist doch private, wieso funktioniert es
-
Weil es privat für die /Klasse/ ist, nicht für jedes einzelne Objekt.
-
klingonisch, ist aber so.
-
d.h. Klassemember sind für die Instanzen global. ich kann von einer Instanz aus, member-value von anderen Instanzen ändern?
-
nein, klassenmember werden für jede instanz extra angelegt. (nur statische klassenmember sind quasi global)
es würde nur keinen sinn machen, eine klasse vor ihrer eigenen implementierung zu verstecken (private), deshalb funktioniert der zugriff auch trotz privat in der eigenen klasse
ps. es wäre doch auch nicht sinnvoll, eine klasse zum freund von sich selbst machen zu müssen, oder?
-
netrobot schrieb:
d.h. Klassemember sind für die Instanzen global. ...
"global" = "Es gibt nur eine Instanz"; das hat nichts mit Zugriffsschutz zu tun. (obwohl Du wahrscheinlich das Richtige meinst, ist es "unüblich", es so zu nennen).
netrobot schrieb:
d.h...ich kann von einer Instanz aus, member-value von anderen Instanzen ändern?
Japp !

Gruß,
Simon2.