Private Datenelemente
-
Wie kann ich auf Private Datenelemente zugreifen(nur lesen) ohne Methoden (außerhalb der klasse)
-
Aoki_san schrieb:
Wie kann ich auf Private Datenelemente zugreifen(nur lesen) ohne Methoden (außerhalb der klasse)
Das geht nicht. Ansonsten wäre
privatesinnlos. Weshalb möchtest du das bzw. was hast du vor?Was es gibt sind
friendFunktionen. Die können, wenn es die Klasse erlaubt, auf private Felder zugreifen.
-
Mir wurde eine Aufgabe gestellt: "Wie kann man auf Private Attribute zugreifen ohne Methoden zu verwenden" deshalb suche ich nach einer lösung ^^
-
mit einer Klasse oder Methode, die als "friend" gekennzeichnet ist
-
wenn ich es als friend setze kann ich ja immer noch die werte verändern ich möchte nur darauf zugreifen

-
Vielleicht kann man was mit Zeigerarithmetik wurschteln. So in etwa wie das hier. Aber damit bewegst du dich ganz ganz schnell auf so dünnes Eis und entfernst dich auch von Plattformunabhängigkeit, dass es sich nicht lohnt da mehr als einen kleinen Gedanken dran zu geben.
-
Aoki_san schrieb:
wenn ich es als friend setze kann ich ja immer noch die werte verändern ich möchte nur darauf zugreifen

Das hängt von der Implementation der friend-Funktionen ab. Außerdem ist das mehr oder weniger geschummelt, weil friend-Funktionen im Prinzip etwas ganz ähnliches wie Methoden sind, da sie innerhalb der Klasse deklariert werden müssen. Mit anderen Worten: Man kommt an private Variablen nur ran, wenn die Klasse das auch so vorsieht. Wenn nicht, hat man keine (legale) Chance.
-
Mit expliziter Spezialisierung von Member-Funktionstemplates, beispielsweise.
Sutter erklärt das hier.
-
Ist
class foo_t { int bar; }; // ... foo_t foo; *reinterpret_cast< int* >( &foo ) = 42;nicht nach
§9.2.20erlaubt?//edit: post d'runter
-
nicht nach §9.2.20 erlaubt?
Ja. Natürlich wenn du den Zieltyp des Casts korrigierst.
-
class theClass { private: int privatInt; public: const int &publicInt; theClass():publicInt(privatInt){} };Oder halt mit C++11 (Glaube ich, geht jedenfalls mit VC++2013)
class theClass { private: int privatInt; public: const int &publicInt = privatInt; };
-
Das hier könnte vielleicht auch gehen, auch wenn man dadurch wieder Schreibrechte hätte:
#define private public
-
daddy_felix schrieb:
Das hier könnte vielleicht auch gehen, auch wenn man dadurch wieder Schreibrechte hätte:
#define private publicAuch Du darfst Arcoths Link auf Sutter verfolgen.
-
volkard schrieb:
Auch Du darfst Arcoths Link auf Sutter verfolgen.
oh danke, das hatte ich übersehen.
lol, jetzt erinnere ich mich, dass ich den Artikel schonmal gelesen habe
habe ich wohl in der Kategorie "kurzer Spaß, für die Praxis irrelevant" abgelegt.