get Methode
-
wieso schreibt man "XXX getxxx() const"
normalerweise schreibt man in einer Klasse:... public: int getInt()const { return _i; } private: int _i;hier dieses "const" macht eigentlich keinen Sinn, man kann sowieso nicht dadurch interne _i verändern
[cpp] ... public: int* getIntPtr()const { return _iPtr; } private: int* _iPtr;hier "const" taugt auch nichts, eigentlich soll man
const int* getIntPtr()schreiben
-
const-Methoden hat für zwei Dinge Sinn:
- Es ist nicht möglich, Variablen des Objektes innerhalb der Methode zu ändern (auch nicht aus Versehen).
- Da der Compiler weiß, dass keine Objektvariablen geändert werden, kann er ggf. besser optimieren.*edit*
Dein zweites Beispiel wird nicht funktionieren, da das private 'const int* _iPtr' ('const' aufgrund der const-Deklaration der Methode) nicht als 'int*' zurückgegeben werden kann.
-
irgendwie verwirrst du mich?!
wieso soll das nicht gehen wenn es an einen const zeiger zurückgegeben wwird??
-
class Foo { public: int get() { return value; } private: int value; }; void machWasMitEinemFooObjekt(const Foo& objekt) { cout << objekt.get(); // geht nicht weil Methode nicht const! }Gruß
-
ser1al schrieb:
irgendwie verwirrst du mich?!
wieso soll das nicht gehen wenn es an einen const zeiger zurückgegeben wwird??
Es geht um die Methode, nicht wie du sie benutzt. In der Methode wird 'const int* _iPtr' zurückgegeben, aber der Rückgabetyp ist 'int*' (ohne const) und das ist nicht möglich.
-
es ist eben der Nachteil, wenn man so schreibt (Bsp2)
d.h. von aussen kann man anhand dieses Zeigers interne private Varible ändern! obwohl man const dahinter schreibt.int *mainptr = MyObj.getIntPtr(); *mainptr++;
-
Es geht um die Methode, nicht wie du sie benutzt. In der Methode wird 'const int* _iPtr' zurückgegeben, aber der Rückgabetyp ist 'int*' (ohne const) und das ist nicht möglich.
verstehe ich nicht redet ihr über
int getInt() constod
const int getInt()
-
netrobot schrieb:
Es geht um die Methode, nicht wie du sie benutzt. In der Methode wird 'const int* _iPtr' zurückgegeben, aber der Rückgabetyp ist 'int*' (ohne const) und das ist nicht möglich.
verstehe ich nicht redet ihr über
int getInt() constod
const int getInt()Weder noch, es geht im dein zweites Beispiel aus dem ersten Beitrag, wo du int* und nicht int verwendest.
-
Innerhalb
int *Klasse::getInt() constist this const. Damit ist auch der Inhalt von this const. Damit ist auch _iptr const. Du willst ein const int * als int * zurückgeben -> das geht nicht!
Das const hintendran bedeutet "Innerhalb dieser Methode ist this const". Damit kannst Du Member des Objekts nur lesen (und auch keine schreibbare Version zurückgeben).
-
LordJaxom schrieb:
Innerhalb
int *Klasse::getInt() constist this const. Damit ist auch der Inhalt von this const.
Das ist richtig. Aber der "Inhalt" von this ist der Zeiger, nicht das, worauf der Zeiger zeigt.
Edit: Bin mir nicht sicher, ob ich mich klar genug ausgedrückt habe. Wenn du aus getInt() const ein "int *" zurückgibst, gibst du nur ein Kopie des konstanten Zeigers zurück. Und das ist zulässig.
-
Hrm...
Hier ist der Inhalt ( *p ) const, der Zeiger kann beliebige Werte annehmen
const int *p;Hier ist der Zeiger ( p ) const, aber der Inhalt änderbar
int * const p;Der Zeiger this ist IMHO sowieso per se immer const. (Warum sollte man innerhalb einer Methode auch this verändern?). Mit der Angabe const hinter der Methodendeklaration ist zusätzlich der Inhalt ( *this ) const.
-
Meinen Edit gelesen? Sorry, die erste Formulierung war wirklich nicht eindeutig.