Kann mir vielleicht einer erklären was ein Struct ist.
-
supertux schrieb:
@interpreter: :p ich wusste es doch, dass er C++ gemeint hat
Dennoch habe das nie ich gefragt.
-
supertux schrieb:
In C ja. In C++ ist mehr als eine Monstervariable, weil C++ Structs auch Funktionen enthalten können und man braucht auch kein typedefs, usw.
In C können structs ebenfalls Funktionen enthalten.
struct foo { void foo(void) { printf("foo\n"); } int wahoo; };
In C gibts halt dann keine Zugriffsrechte für Membervariablen.
-
/bin/bash0R schrieb:
In C können structs ebenfalls Funktionen enthalten.
Nein. Schauen wir mal in den C-Standard:
$6.2.5 20 schrieb:
A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an imcomplete array), each of which has an optionally specified name and possibly distinct type.
$3.14 schrieb:
object
region of data storage in the execution environment, the contents of which can represent values
-
man könnte höchstens einen funktionspointer in einer struct unterbringen- wie jeden anderen pointer halt auch.
-
/bin/bash0R schrieb:
In C können structs ebenfalls Funktionen enthalten.
Tut mir leid, das ist falsch.
rex@supertux:~> cat z.c && gcc -c z.c -ansi -Wall #include <stdio.h> struct foo { void foo2(void) { printf("foo\n"); } int wahoo; }; z.c:4: error: field `foo2' declared as a function z.c:4: warning: no semicolon at end of struct or union z.c:4: error: syntax error before '{' token z.c:6: error: syntax error before '}' token
Die C++ structs verhalten sich anders als die C structs. In C++ braucht man kein Typedefs, man muss die Variablen nicht mit struct strname varname deklarieren und so. Structs sind einfache Klassen, bei denen die Elemente standardmäßig public sind.
-
supertux schrieb:
Structs sind einfache Klassen, bei denen die Elemente standardmäßig public sind.
in c++ kann man, überall wo 'class' auftaucht auch 'struct' schreiben. nur andersrum geht's nicht so einfach, weil in einer 'class' erstmal alles 'private' ist.
-
Hallo,
deine Aussage stimmt so nicht. Oftmals wird das private einfach weggelassen, wenn man eine class benutzt, eben weil es standardmäßig privat ist. Wenn du das alles durch ein struct ersetzen würdest, wären auf einmal alle Klassenvariablen public. Es stimmt zwar, dass es funktionieren würde, aber die Kapselung wäre aufgehoben und sinnvoll ist es auf gar keinen Fall.
Siehe dazu auch folgendes Interview:
http://www.artima.com/intv/goldilocks3.html
-
CarstenJ schrieb:
deine Aussage stimmt so nicht. Oftmals wird das private einfach weggelassen, wenn man eine class benutzt, eben weil es standardmäßig privat ist. Wenn du das alles durch ein struct ersetzen würdest, wären auf einmal alle Klassenvariablen public. Es stimmt zwar, dass es funktionieren würde, aber die Kapselung wäre aufgehoben und sinnvoll ist es auf gar keinen Fall.
du hast vollkommen recht und ich stimme dir auch zu aber wenn man alle 'class' gegen 'struct' ersetzen würde, könnte man das programm compilieren, linken und ausführen wie vorher auch.
-
net schrieb:
du hast vollkommen recht und ich stimme dir auch zu aber wenn man alle 'class' gegen 'struct' ersetzen würde, könnte man das programm compilieren, linken und ausführen wie vorher auch.
ja, aber die Rechtestruktur der Klasse hätte sich schon gändert, und es gäbe auch das Risiko, das man auf Elemente zugreift, die privat bleiben sollen.
-
Abgesehen davon find ich es auch sehr schlechten Stil. Und Stroustrup sagt ja in seinem Interview, dass man eine Struktur nur dann nutzen sollte, wenn es angebracht ist.