Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zugriffsmodifier

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.08.2005, 16:26 Uhr
~Christoph R.
Gast


Hallo!

Ich habe mehrere Klassen die sich gegenseitig verwenden. Nun bieten diese Klassen einige public-Methoden an, die von anderen Anwendungen verwendet werden können (das ganze soll eine Bibliothek werden, was aber für meine Frage keine Rolle spielt).

In einigen seltenen Fällen müssen die Klassen aber auch (als private definierte) Daten untereinander austauschen. Zu diesem Zweck verwende ich derzeit ebenfalls public-Methoden. Nun gefällt mir diese Möglichkeit für den Datenaustausch aber nicht, da dann auch fremde Anwendungen diese public-Methoden nutzen können, die aber eigentlich nur innerhalb meiner Bibliothek verwendet werden sollen (der Benutzer soll nicht durch Methoden verunsichert werden, die eigentlich gar nicht für ihn gedacht sind).

C++ kennt aber leider keine Zugriffsmodifier für den Zugriff nur im eigenen Projekt oder nur im eigenen Namensraum.

Welche Lösungsmöglichkeiten kennt ihr?

Danke schonmal im Voraus!

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.08.2005, 17:32 Uhr
predator



Ich weiß nicht, ob ich deine Frage richtig verstanden habe,
aber benutz doch friend (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_friends.asp)
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2005, 17:58 Uhr
(un)wissender
Niveauwart


Na ja, was du auch machen könntest, ist einen internen Namensraum schaffen, wo du die Daten rein tust. Musst den ja nicht dokumentieren. Klar können die anderen darauf zugreifen, wenn sie den Header nutzen, aber warum sollten sie? Da steckt dann schon (böse) Absicht dahinter.
Ich habe solche modifier aber auch schon vermisst...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.08.2005, 12:44 Uhr
RHBaum



Wenn du klassen brauchst, die sich untereinander "unterhalten", deren kommunikationsmethoden aber nich von aussen "gesehen" werden, ohne uebermeassige verwendung von friend ?

Dann brauchen deine Klassen eine oeffentliche schnittstelle, sprich eine Basisklasse wo nur genau die funktionen drinnestecken, die du nach draussen geben willst.
Wenn nich ueber vererbung gehen willst / kannst, tun es wrapper auch ....

Nur die erzeugung deiner eigentlichen klassen wird etwas komplizierter meisst, weil das darfst den Anwender nich mehr vollstaendig ueberlassen ...

Den positiven effekt den noch quasi gratis dazubekommst, wenn die eigentliche implementation versteckst, ist das du auch von der impl total unabhaengig wirst, also sprich andere implementationsvarianten spaeter ohne anederung an dem Anwendercode einbauen kannst.

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.08.2005, 00:16 Uhr
~rene1
Gast


ähm entschuldige bitte aber du hast scho mitbekommen
dass es neben public und private auch noch protected gibt?
und da kannst du dann genau deine friend-classes definieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.08.2005, 00:19 Uhr
~rene1
Gast


BTW: wie siehst eigentlci aus mit inheristance(vererbung)?
wenn ich ne class b von ner class a ableite,
kann doch class b auf die private elements aus class a
zugreifen oder nichtr?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.08.2005, 21:39 Uhr
ao

(Operator)



Zitat von ~rene1:
BTW: wie siehst eigentlci aus mit inheristance(vererbung)?
wenn ich ne class b von ner class a ableite,
kann doch class b auf die private elements aus class a
zugreifen oder nichtr?

Nein, nur auf die protected und public Elemente, und nur wenn protected oder public abgeleitet wurde.
Und du solltest nicht ableiten, nur um Zugriff auf Elemente zu kriegen, sondern nur dann, wenn die reale Beziehung zwischen B und A das rechtfertigt, d.h. wenn gilt: B ist ein A, z.B. "Fahrrad *ist ein* Fahrzeug". Wenn die Beziehung eine andere ist, z.B. "Fahrrad *hat* Räder", dann ist Ableitung ein Designfehler, weil es dich todsicher irgendwann vor Probleme stellen wird.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: