const* als Rückgabewert funktioniert nicht ?
-
2 und 3 sind äquivalent. Statt dem Cast, solltest du die Methode überladen:
A& foo() { return a; } const A& foo() const { return a; }
In deinem Fall reicht aber eine const-Methode, weil du sowieso eine Kopie des Zeigers zurückgibst.
-
Danke für deinen Tipp ebenfalls...aber hatte was anderes gemeint:
Wollte einen const Pointer auf class A. nicht umgekehrt.
Wird jetzt in meine Engine gebaut..aber davon sage ich nichts mehrGruss
Finalbrain
-
FinalbrainXP schrieb:
@Interpreter
Wollte einen const Pointer auf class A. nicht umgekehrt.Der dir aber nichts bringt, weil das eh kein L-Value ist.
-
Ach ja..habe gleich noch ne Frage dazu...
Interpreter hat völlig recht damit, das es völlig unnütz ist.
Kann mir jemand denn in nen paar setzten erklären, warum man in c++ nicht on the fly zuweisungen machen kann ? (Oder wie man das nennt)Weil wollte mich ja mit dem const Ponter absichern, das
man nicht folgendes machen kann.B * b = new B();
b->getBack()=NULL;..aber dieses on the Fly setzen geht ja eh nicht irgendwie..weiss jemand warum ?
Gruss
Finalbrain
-
FinalbrainXP schrieb:
Ach ja..habe gleich noch ne Frage dazu...
Interpreter hat völlig recht damit, das es völlig unnütz ist.
Kann mir jemand denn in nen paar setzten erklären, warum man in c++ nicht on the fly zuweisungen machen kann ? (Oder wie man das nennt)Weil wollte mich ja mit dem const Ponter absichern, das
man nicht folgendes machen kann.B * b = new B();
b->getBack()=NULL;..aber dieses on the Fly setzen geht ja eh nicht irgendwie..weiss jemand warum ?
Gruss
Finalbrain
Wie gesagt, weil das kein L-Value ist. Wenn du dem Rückgabewert "on the fly
" etwas zuweisen willst, dann musst du eine Referenz zurückgeben.
z.B.:A *& getBack() { return back; }
-
Das hieße also, ich müsste dem ne Referenz auf nen A-Pointer zurückgeben ?
Und ne Referenz ist doch nen dereferenzierter Pointer in dem Sinne ?
(Hasse Referenzen, weil ich von C komme)
Also geht so:
#include <stdio.h> class A { public: A() {x=10;} int getX(){return x;} private: int x; }; class B { public: B(){back = new A();} A ** getBack() {return &back;} private: A * back; }; void main() { B * b = new B(); (*(b->getBack()))=NULL; }
..glaube habe es verstanden. Erst durch das dereferenzieren bekomme ich ein L-Value, da ich ja vorher nur nen einfachen Pointer hatte.
-
FinalbrainXP schrieb:
Das hieße also, ich müsste dem ne Referenz auf nen A-Pointer zurückgeben ?
Japp.
Und ne Referenz ist doch nen dereferenzierter Pointer in dem Sinne ?
So wird es wohl meistens implementiert werden, ja.
Also geht so:
#include <stdio.h> class A { public: A() {x=10;} int getX(){return x;} private: int x; }; class B { public: B(){back = new A();} A ** getBack() {return &back;} private: A * back; }; void main() { B * b = new B(); (*(b->getBack()))=NULL; }
..glaube habe es verstanden. Erst durch das dereferenzieren bekomme ich ein L-Value, da ich ja vorher nur nen einfachen Pointer hatte.
Ja, das sollte gehen. Ich hoffe, dass du das nur zu Lern/Testzwecken schreibst und nicht wirklich verwenden willst.
-
@Interpreter..gibt es in c++ auch so schöne Tricks wie in c ? Du kennst doch da bestimmt welche
Beispiel:
int a[9][9]; 1[1[a]] = 666; // <=> a[1][1] = 666;
Ps: Sind nur Lernzwecke
(Auch nen Nachtmensch was ?
)
-
muß das nicht eher 1[&1[a]] heißen?
-
Hmm...also habe es mit & getestet..da geht es nicht, weil
int a[10][10];
a[9][9] <=>
((a+9)+9) <=>
(9+(a+9)) <=>
(9+(9+a)) <=>
*(9+9[a]) <=>
9[9[a]]...und 9[a] ist ja ein dereferenzierter Wert der auf '9'
draufaddiert wird und das ganze dann wieder derefernziert wird.
Würde & benutzt, würde ja die Adresse auf 9 addiert werden, und das ganze dann im Nirvana landen. Oder habe ich was falsch verstanden ?Gruss
Finalbrain
-
schöner beweis.
du hast recht.
-
FinalbrainXP schrieb:
@Interpreter..gibt es in c++ auch so schöne Tricks wie in c ? Du kennst doch da bestimmt welche
Naja, bin bestimmt kein C l337 haxx0r. Aber ganz nett finde ich das:
int f(int i) { return i; } int main() { int a[] = {1,2,3,4,5,6}; cout << (f(1[a])[a]); }
Sinnlos, aber nett anzusehen
Beispiel:Ps: Sind nur Lernzwecke
(Auch nen Nachtmensch was ?
)
Ja