Typen in C - AG Kastens - Universität Paderborn
Typen in C - AG Kastens - Universität Paderborn
Typen in C - AG Kastens - Universität Paderborn
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3.3. Gegenüberstellung von Struct-<strong>Typen</strong> und Class-<strong>Typen</strong><br />
E<strong>in</strong> struct-Typ ist e<strong>in</strong> Werttyp, der Konstruktoren, Konstanten, Attribute, Methoden etc.<br />
deklarieren kann, kurz die gleichen Datenelemente hat wie e<strong>in</strong>e Klasse.<br />
Auf dem ersten Blick sche<strong>in</strong>t es, als ob struct-<strong>Typen</strong> identisch mit class-<strong>Typen</strong> s<strong>in</strong>d. Diese<br />
Ähnlichkeit täuscht. Denn wie oben erwähnt wurde, s<strong>in</strong>d struct Werttypen mit Wert-Semantik,<br />
während class-<strong>Typen</strong> Referenz-Semantik haben und Vererbung vom struct nicht unterstützt wird.<br />
Daher werden zu Struct-<strong>Typen</strong> ke<strong>in</strong>e Objekte erzeugt sondern Struct-Datenelemente (Struct-<br />
Werte) direkt <strong>in</strong> Variablen gespeichert. Die Nutzdaten (Datenelemente e<strong>in</strong>es Struct-Typs) werden<br />
auf dem Laufzeitkeller verwaltet, da sie wie oben erwähnt direkt <strong>in</strong> Variablen gespeichert werden<br />
und somit e<strong>in</strong>e Wertsemantik haben. E<strong>in</strong>e Variable dieses Typs enthält direkt die Nutzdaten,<br />
während e<strong>in</strong>e Variable e<strong>in</strong>es Referenztyps (class-Typ) nur e<strong>in</strong>e Referenz auf e<strong>in</strong> Objekt im<br />
Speicher enthält. Es ist auch nicht möglich, dass e<strong>in</strong> Struct-Typ e<strong>in</strong>e Basisklasse spezifiziert (<br />
also ke<strong>in</strong>e Vererbung). Alle Struct-<strong>Typen</strong> erben jedoch implizit von Object und s<strong>in</strong>d sealed. Der<br />
Modifier abstract ist für Struct-<strong>Typen</strong> nicht erlaubt.<br />
Beispiel:<br />
struct Po<strong>in</strong>t{<br />
private <strong>in</strong>t x;<br />
private <strong>in</strong>t y;<br />
public Po<strong>in</strong>t(<strong>in</strong>t x, <strong>in</strong>t y) {<br />
this.x = x;<br />
this.y = y;<br />
}<br />
}<br />
Struct-<strong>Typen</strong> s<strong>in</strong>d dort nützlich, wo man e<strong>in</strong>e kle<strong>in</strong>e Datenstruktur hat, die Wert-Semantik hat.<br />
Komplexe Zahlen, Punkte im Koord<strong>in</strong>atensystem oder Schlüssel-Wert Paare <strong>in</strong> e<strong>in</strong>em<br />
Wörterbuch-Datenstruktur s<strong>in</strong>d gute Beispiele für struct. E<strong>in</strong>fache Grundtypen wie <strong>in</strong>t, bool s<strong>in</strong>d<br />
faktisch auch Struct-<strong>Typen</strong>, die aber vordef<strong>in</strong>iert s<strong>in</strong>d. Der Anwender kann durch Operator-<br />
Overload<strong>in</strong>g se<strong>in</strong>e eigenen neuen „primitiven“ <strong>Typen</strong> implementieren. E<strong>in</strong> entsprechendes<br />
Gegenkonstrukt für struct kann man <strong>in</strong> Java nicht f<strong>in</strong>den, wohl aber <strong>in</strong> C++.<br />
4. Klassen und Interfaces<br />
4.1. Kassen<br />
E<strong>in</strong>e Klasse ist e<strong>in</strong>e Datenstruktur, welche Konstanten, Attribute, Events, Methoden, Operatoren,<br />
Konstruktoren, e<strong>in</strong>gebettete <strong>Typen</strong> usw. enthält. Class-<strong>Typen</strong> unterstützen Vererbung, e<strong>in</strong><br />
Mechanismus, mit dem man e<strong>in</strong>e Basisklasse erweitert und spezialisiert. In C# lässt sich e<strong>in</strong>e<br />
Klasse wie folgt deklarieren.<br />
class-modifiers class identifier class-base class-body , wobei<br />
die Menge der Nicht-Term<strong>in</strong>ale aus class-modifiers, identifier, class-base und class-body die<br />
Menge Term<strong>in</strong>ale aus classs besteht.<br />
class-modifiers: {public, protected, <strong>in</strong>ternal, private, abstract, sealed }<br />
Seite 9 von 17