On Wed, Nov 15, 2006 at 05:27:18PM +0100, Ulf Lorenz wrote:
Hallo allerseits,
Hi Ulf,
class Test { public: static Test* eintest(); private: int i; };
test.cpp:
Test* Test::eintest() { Test* t = new Test(); t->i = 5; return t; }
D.h. ich greife in der statischen Funktionen auf private Elemente eines Objektes dieser Klasse zu.
Da du auf eine Instanz der Klasse (new Test()) zugreifst ist das kein Problem, wenn du versucht hättest direkt auf i zuzugreifen hätte dich der Compiler schon gewarnt bzw. hätte abgebrochen.
Der gcc schluckt das offenbar ohne Beanstandungen. AFAIR akzeptiert er auch Sachen wie
Object::Object(Object& clone) :t(clone.t)
Ja, ist ja auch in Ordnung. Klasseninstanzen können untereinander auf ihre Membervariablen/private Methoden zugreifen.
Wenn du folgende Definition verwendest:
class Foo { friend class Bar;
private: int geheim; };
könntest du sogar das machen:
class Foo { public: Foo( const Bar &bar ) : auchGeheim( bar.geheim ) { }
private: int auchGeheim; };
Meine Frage jetzt: Ist das offizielles C++ oder eine gcc-Erweiterung?
Offizieller C++ Standard.
Ciao, Tobias