globale struktur (im modul definiert, und dennoch in der main() bekannt !!
-
Jetzt stellt sich nur noch eine Frage, was für einen Sinn hat das ganze?
-
kapselung
die implementierung dieses modules kann völlig unabhängig vom rest des programms verändert, erweitert, .... werden (solange sich die public funktionen nicht verändern), und dies ohne, das eine neu-kompilation der anderen module nötig ist
-
warum fragst du eigentlich?
dein genanntes "Pimpl Idiom" geht doch unter anderem auch in diese richtung
-
bozo schrieb:
warum fragst du eigentlich?
dein genanntes "Pimpl Idiom" geht doch unter anderem auch in diese richtung
Deshalb wundere ich mich ja, es gibt funktionierende, dokumentierte und allgemein bekannte Alternativen. Wieso sollte man es anders machen?
-
diese methode ist doch auch funktionierend, dokumentiert und allgemein bekannt
und auch noch länger im gebrauch, da sie schon in c benutzt wurdees gibt nun mal nicht nur eine möglichkeit etwas zu tun, oft sind es mehrere, z.b. kann man auch statt des pointers im obrigen beispiel einen index benutzen
warum man etwas anders machen sollte? weil es jenach genauem anwendungsfall einige unterschiede gibt, und nicht immer alle lösungsvarianten gleich gut passen
(
nicht so ernst zu nehmende antwort wäre ->warum sollte man c++ nutzen, es gibt doch c, warum c, es gibt doch asm, .....
warum sollte man ...... (kannst etwas einsetzen), es gibt doch .....)
-
Aber wenn man C will, sollte man auch nicht unbedingt C++ nutzen. Berichtige mich, aber auf x und y kann er in obiem Beispiel nicht zugreifen, oder?
-
ja und nein
kommt drauf an von wo du diesen zugriff meinst:
in main.c kann man nicht auf die daten in der struct zugreifen, was ja auch der sinn für diese lösung ist, nur in f.cpp kann man auf die daten in der struct zugreifen, und nur dort gehört ja auch der direkte zugriff auf die daten in der struct hin
-
kapselung
die implementierung dieses modules kann völlig unabhängig vom rest des programms verändert, erweitert, .... werden (solange sich die public funktionen nicht verändern), und dies ohne, das eine neu-kompilation der anderen module nötig ist
Das ist nicht Kapselung sondern Functionoverheat. Jedes mal wenn du einen Wert in der Structur verändern willst musst du eine ganze Funktion aufrufen. Ist dir es wirklich so wichtig die 2 int zu verkapseln?
und auch noch länger im gebrauch, da sie schon in c benutzt wurde
Die extern Methode ist eine C Methode die C++ compatible ist.
warum sollte man c++ nutzen, es gibt doch c, warum c, es gibt doch asm, .....
warum sollte man ...... (kannst etwas einsetzen), es gibt doch .....Warum sollte man sich das Leben leicht machen, wenn es auch schwer geht?
in main.c kann man nicht auf die daten in der struct zugreifen, was ja auch der sinn für diese lösung ist, nur in f.cpp kann man auf die daten in der struct zugreifen, und nur dort gehört ja auch der direkte zugriff auf die daten in der struct hin
Vielleicht ist das die C Weise dies zu tun aber in C++ gibt es dafür private Member und Funktionen. Und da dies ein C++ Forum ist...
-
@Iregendwer
sorry, aber du hast es falsch verstandenDas ist nicht Kapselung sondern Functionoverheat. Jedes mal wenn du einen Wert in der Structur verändern willst musst du eine ganze Funktion aufrufen. Ist dir es wirklich so wichtig die 2 int zu verkapseln?
diese zwei int's sind nur ein beispiel das Entyl_Sa benutzt hatte, und ich habs einfach übernommen,
die sind total unwichtig, waren nur sein beispiel,
es geht im grunde um einen abstrakten datentypen, der gekapselt werden soll, und für den kontextbezogene funktionen definiert werdenDie extern Methode ist eine C Methode die C++ compatible ist.
das mit dem extern ist aber etwas völlig anderes,
da wird eine variable global zugänglich gemacht, was man nun wirklich nur mit bedacht machen sollte, auch wollte er die struct auch erst in der main.cpp benutzen und kein festdefinierte variable in der moduldatei habenWarum sollte man sich das Leben leicht machen, wenn es auch schwer geht?
habe ich denn etwas anderes geschrieben, nein
Vielleicht ist das die C Weise dies zu tun aber in C++ gibt es dafür private Member und Funktionen. Und da dies ein C++ Forum ist..
he?
was hat das damit zu tun, nichts
meine antwort passt einfach auf die in diesem thread gestellte frage und um die geht es ja wohl, es geht hier nicht um private member und funktionen, sondern darum das die struct nicht gloabal (in dem header) genau deklariert werden soll
-
he?
was hat das damit zu tun, nichts
meine antwort passt einfach auf die in diesem thread gestellte frage und um die geht es ja wohl, es geht hier nicht um private member und funktionen, sondern darum das die struct nicht gloabal (in dem header) genau deklariert werden sollEs geht darum ein struct in einem module zu definiren (definiren!=declariren) und es in einem anderen Module zugänglich zu machen, das ist für mich eindeutig die extern Methode, von Kapselung war nie die Rede.
Desweiteren wenn man in C++ Variablen einer struct für den Endprogrammirer unzugänglich machen will dann benutzt man private. Die Memberfunctionen werden in ein separates Modul gepackt. Und wenn man seine struct (was inzwischen schon eine class ist) verändern will dann verändert man sie im Header denn wenn man die neue benutzen will muss man eh den neuen Header benutzen.
-
Irgendwer schrieb:
he?
was hat das damit zu tun, nichts
meine antwort passt einfach auf die in diesem thread gestellte frage und um die geht es ja wohl, es geht hier nicht um private member und funktionen, sondern darum das die struct nicht gloabal (in dem header) genau deklariert werden sollEs geht darum ein struct in einem module zu definiren (definiren!=declariren) und es in einem anderen Module zugänglich zu machen, das ist für mich eindeutig die extern Methode, von Kapselung war nie die Rede.
Desweiteren wenn man in C++ Variablen einer struct für den Endprogrammirer unzugänglich machen will dann benutzt man private. Die Memberfunctionen werden in ein separates Modul gepackt. Und wenn man seine struct (was inzwischen schon eine class ist) verändern will dann verändert man sie im Header denn wenn man die neue benutzen will muss man eh den neuen Header benutzen.
Du weißt wirklich nicht so ganz genau, was extern bedeutet, oder?
-
genau tobidope
Irgendwer, du unterliegst einem irrtum
schau doch einfach noch mal in die post's von xdsmpDS, er schrieb zwar etwas von definieren, aber durch die nachfolgenden aussagen wird ganz klar deutlich was er will
...ahso ich will die struktur auch auf keinen fall in der .h definieren !! jedenfalls nicht so das man dort etwas über ihren aufbau erkennen könnte !...
und genau darum geht es in diesem thread!
was du mit deinem extern machen willst ist etwas völlig anderes!
und deine sache mit der class und private passt hier einfach auch nicht, hier ist eine ganz andere zielsetzung gefragt worden!
z.b. ist es eben möglich die daten in der struct zu verändern ohne das der header verändert wird und alle dateien die diesen header benutzen neu kompiliert werden müssenschau dir einfach noch mal die post's in diesem thread genau an,
dann sollte es dir eigentlich klar werden, um was es hier geht und was der unterschied zu deinem jeweils geschriebenen ist
-
Du hast auch nicht so ganz genau gelesen, was ich sagte. Mir ging es darum, das er denn Beriff extern falsch verwendet. Mir ist schon klar was er letztenendes bezweckt, doch der scopeidentifier extern hat damit nun mal gar nichts zu tun. Ich habe bisher überhaupt nichts von extern gesagt.
-
der sinn ?
naja es gibt in c++ ja die möglichkeit module zu kapseln
das heißt das man die module zB auch getrennt von der main compelieren kann !
zudem kann es fälle geben wo man bestimmte lösungen geheim halten will, also auch eine spezielle struktur !warum ich das feld mit der unbekannten struktur als über die main schiebe ?
naja hab wohl zu lange MS VB6.0 geprogged *g*
kanns nun mal net mehr andersund danke für die vielen antworten ! werd mich nach de feiertagen noch mal damit beschäftigen ! :xmas1: :xmas2: :xmas2: :xmas2: