Kann mir vielleicht einer erklären was ein Struct ist.
-
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.
Wir sind hier aber im ANSI C Forum. Sonst könnt ich jetzt auch noch anfangen zu erklären, was ein struct in C# ist
-
interpreter schrieb:
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.
Wir sind hier aber im ANSI C Forum. Sonst könnt ich jetzt auch noch anfangen zu erklären, was ein struct in C# ist
Der Grund warum ich C++ Structs erwähnt habe ist, weil interpreter ursprünglich in Borland C++ Forum gepostet hat, und Jansen verschob das Thread in ANSI C, obwohl es C++ sein könnte (schließlich war Borland C++ der Urpsrung)
-
supertux schrieb:
Der Grund warum ich C++ Structs erwähnt habe ist, weil interpreter ursprünglich in Borland C++ Forum gepostet hat
-
Hi,
Also eigentlich meinte ich auch "struct" in c++ das wahr eigentlich schon richtig. Aber so wie die erklärungen soweit sind ist es schon zu verstehen was gemeint ist das hilft mir auf jeden fall im moment weiter.
Gruß
DerFuchs
-
@interpreter: :p ich wusste es doch, dass er C++ gemeint hat
-
@supertux,
jo da lagst du schon ganz richtig.@ all
und hier jetzt noch mal ein Dickes Lob an euch für die Nette und schnelle Hilfe danke.Gruß
DerFuchs
-
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.