DrScherzkeks Geschrieben 16. Dezember 2001 Geschrieben 16. Dezember 2001 Ich habe ein Problem und zwar hab ich keinen schimmer wie ich in C Typen erstelle. Im Delphi ist das ja ganz easy Bsp.: TIrgendwas = (Wert1,Wert2,Wert3); Aber wie ist das bei C ?? :confused: Zitieren
Crush Geschrieben 16. Dezember 2001 Geschrieben 16. Dezember 2001 Du wolltest nur C wissen, dann brauchst Du nur den Typedef wegstreichen und die Template-Geschichte überspringen. Den Struct gibt es in C genauso. Aber weil ich gar nicht erst mit C rumgemacht habe überspringe ich diesen Teil. Ob es den Enum in C gibt weiß ich leider nicht so genau, ich denke aber ja. In C++ wird das über Struct, Enum und Union gemacht - in Verbindung (zwecks Bequemlichkeit) mit einem Typedef. z.B. // Die Nasenart wird durchnummeriert von 1 an hochwärts, man kann hier als Synonym die Worte verwenden enum Nasenart{Hakennase=1, Gurkennase, Plattnase, Stupsnase}; Mit dem typedef kann man die ganze Struktur (welche ein neuer Datentyp ist) über die Bezeichnung einenase ansprechen, welches selber nur Typ ist, noch kein Objekt! In der Union wird dieselbe Speicherstelle unter verschiedenen Datentypen verwendet. Man kann z.B. einen long in den Nasendurchschnitt reinschreiben und diese Zahl direkt an der Speicherstelle als int wieder auslesen (welcher ja kleiner ist). Das ist kein Typ-casting oder ähnliches - hier wird einfach mit brutaler Gewalt die Position des long-Wertes als int ausgelesen. Ich weiß, daß ich ein wenig zu oft Nase geschrieben habe, aber mir gefällt das irgendwie (hehe) Standard wäre es natürlich alle Elemente ohne Nase beginnen zu lassen, weil man ja durch den Typ weiß, daß es sich um eine Nase handelt. typedef struct Nase { bool vorhanden; int Nasenart; long Nasenlaenge; short Nasenhoehe; char Nasenbezeichnung[20]; union { int idurchschnitt; long ldurchschnitt; double ddurchschnitt; }Nasendurchschnitt; }einenase; Im Programm werden die Elemente über den Punktoperator angesprochen. Die Nasenart wird mit dem Synonym Gurkennase für den Wert 2 initialisiert. void Nase::IrgendeineNasenroutine(void) { einenase hn; // hier wird jetzt tatsächlich eine Nase erzeugt - in C müßte man halt: struct Nase hn; schreiben hn.Nasenart=Gurkennase; hn.Nasendurchschnitt.idurchschnitt=5; long l=hn.Nasendurchschnitt.ldurchschnitt; // gnadenlos den int als long auslesen! } Man kann die einenase jetzt überall als ein Ding verwenden und sich Nasenarrays erzeugen lassen oder die Nasen als Botschaften verschicken =8-D wie Du willst! Dann gibt es noch die Geschichte mit den "abstrakten Datentypen" oder auch Templates genannt. Man kann Templates verwenden und später Programme mit externen Datentypen zu spezifizieren. Dabei wird das Programm auf den Datentyp, den man ihm als Template-Parameter übergibt, "umgeschrieben" und der erzeugte Programmcode ist in der Lage mit diesem Datentypen umzugehen. Diese Klassen arbeiten halt einfach mit Platzhaltern für die später nachgereichten Datentypen. <FONT COLOR="#a62a2a" SIZE="1">[ 17. Dezember 2001 17:31: Beitrag 6 mal editiert, zuletzt von Crush ]</font> Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.