private struct Zugriff außerhalb der Klasse
-
Hallo!
Ich habe in Folgendes definiert:
struct beispiel {int b1;int b2;}; class cName { private: beispiel sBeispiel; }
Ich möchte nun von außerhalb der Klasse auf das struct zugreifen.
Dafür würden mir diese Wege einfallen:
Eine Funktion in der Klasse, die return struct macht.
Das struct als public definieren.Da das struct jedoch ziemlich groß ist und ich immer nur kleine Teile davon brauch ist das nicht sehr effizient.
Ich würde gerne von außerhalb der Klasse einfach folgendes machen:
GetStructComponent(b1);Die Funktion GetStructComponent müsste natürlich public sein. Sie returned nur den Teil des struct welcher im Parameter angegeben ist.
Nur wie sieht diese aus? Geht sowas überhaupt?
Oder gibt es eine viel bessere Lösung?Danke für die Tipps!
atz
-
Das struct als public definieren.
Da das struct jedoch ziemlich groß ist und ich immer nur kleine Teile davon brauch ist das nicht sehr effizient.
Welchen Einfluss haben deiner Meinung nach access-level auf die Effizienz des Zugriffs?
Du solltest dich entscheiden: Entweder die struct ist ein Implementationsdetail der Klasse, Clients können ihre Existenz ignorieren und verwenden stattdessen ein hübsches Interface (das am Besten von der struct entkoppelt ist) oder aber deine Klasse ist mehr oder weniger nur eine "bag of data", dann kannst du die struct auch public damit für Clients direkt zugreifbar machen.
-
Ich wuerde fuer die einzelnen Komponenten des Structs jeweils ein eigene Methode fuer den Zugriff spendieren. Ich denke ein Vorteil ist, das die Kapselung nicht aufgebrochen wird. Ob du die Attribute als struct zusammenfasst oder als einzelne Attribute realisierst ist ja fuer die Nutzung der Klasse nicht entscheident. Die Implementierung wird also verborgen.
Eine andere Moeglichkeit waere eine Referenz auf das Struct zurueckgeben (nicht das struct selbst) und diese dann manipulieren. Damit bricht man meiner Meinung nach aber die Kapselung auf
Falls ich Mist geschrieben habe moege man mich bitte berichtigen.
-
Servus!
Ich weiss, dass man mich wahrscheinlich gleich mit Schimpf und Schande aus
dem Forum werfen wird, aber folgender Ansatz wäre ebenso möglich!class cName { friend void accessingFunction(); friend class AccessingClass; private: beispiel sBeispiel; };
Zieht nicht so hart mit mir ins Gericht!
Ich weiss schon, dass 'friends' nicht gerade die Freunde der
Systemmodellierer sind!Grüße,
TS++
-
wozu friend, wenns die klasse selber problemlos awickeln kann?
-
Ich hab mich dazu entschlossen einen Ptr auf das struct zurückzugeben.
Ob das jetzt toll programmiert ist oder nicht is mir egal...atz
-
wozu einen pointer zurückgeben, wenn ne referenz reichen würde(was imho sinnvoller ist)?
-
Ich habe gedacht, da das struct sehr groß ist muss der compiler nicht 2mal Speicher dafür reservieren.
Falsch gedacht?
atz
-
zwischen private/public gibts nur beim zugriff unterschiede, sonst ist alles gleich
-
atzplzw schrieb:
Ich habe gedacht, da das struct sehr groß ist muss der compiler nicht 2mal Speicher dafür reservieren.
bei einer referenz wird auch kein zusätzlicher speicher reserviert. es entfällt einfach die ganze pointer syntax...
-
Wie sieht der Code denn dann aus?
Im Moment hab ich:
struct beispiel {int b1;int b2;}; class cName { beispiel *GetStructPtr() { return &sBeispiel; } private: beispiel sBeispiel; } //andere Datei beispiel *bsp = cName.GetStructPtr(); bsp->b1 ....
atz