04.06.2013 Aufrufe

Typen in C - AG Kastens - Universität Paderborn

Typen in C - AG Kastens - Universität Paderborn

Typen in C - AG Kastens - Universität Paderborn

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!