Pointer auf Objekt einer Klasse zurückgeben
-
Hallo,
wie erreiche ich folgendes:
class A { public: Object* getObject() const { return //????? } private: Object obj; };
Ich hab da gerade echt ein Brett vor dem Kopf
-
class A { public: Object* getObject() const { return &obj; } private: Object obj; };
Allerdings würde ich der Konsistenz zuliebe das so machen:
class A { public: Object* getObject(); // entweder so const Object* getObject() const; // oder so, oder beides // Object* getObject() const; // aber nicht mischen private: Object obj; };
-
Und warum nicht mischen?
Kann doch sein, dass man einen ändernden Zugriff auf ein objekt zulässt und mit dem const hinter der FUnktion aber deutlich macht, dass sich an der Klasse über die der Zugriff erfolgt nichts ändert?
Also:
Object* getObject(); // Object und Klasse über die Zugriff erfolgt kann sich ändern/geändert werden
Object* getObject(); const // Object kann geändert werden
-
Das Object kann in diesem Fall eben doch verändert werden, das führt zu UB.
-
314159265358979 schrieb:
Das Object kann in diesem Fall eben doch verändert werden, das führt zu UB.
Ja, aber Klasse A dafür nicht? Oder nicht?
-
314159265358979 schrieb:
Das Object kann in diesem Fall eben doch verändert werden, das führt zu UB.
Nein, kein UB - nur ein unlogisches Interface.
-
BrettVormKopp schrieb:
314159265358979 schrieb:
Das Object kann in diesem Fall eben doch verändert werden, das führt zu UB.
Ja, aber Klasse A dafür nicht? Oder nicht?
Ja - aber fragt sich was denn ändern heisst? Ist A auch geändert, wenn einer seiner Member geändert wird? const bei Methoden ist eine logische Sicht! Es gibt Fälle wo ein Objekt seinen technischen Zustand ändert, nicht jedoch seinen logischen.
-
Ich muss mir das nochmal durch den Kopf gehen lassen, aber ich glaube diese Definition von "ändern" finde ich gut