05.11.2013 Aufrufe

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

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.

<strong>Vergleich</strong> <strong>von</strong> <strong>Delphi</strong> <strong>und</strong> <strong>Visual</strong> <strong>C++</strong> - Kapitel 2B<br />

struct Person<br />

{<br />

unsigned short Nummer;<br />

union<br />

{<br />

struct<br />

{ char Geburtsort[41];<br />

int Geburtsjahr;};<br />

struct<br />

{ char Land[26];<br />

char Stadt[31];<br />

int PLZ;};<br />

};<br />

};<br />

Person = record<br />

Nummer: Word;<br />

Case Integer Of<br />

0: (Geburtsort: String[40];<br />

Geburtsjahr: Integer);<br />

1: (Land: String[25];<br />

Stadt: String[30];<br />

PLZ: Integer);<br />

end;<br />

Der Ausdruck Case Integer Of in Pascals varianten Records kann leicht mißverstanden werden. Man kann ihn sich zum Verständnis des varianten<br />

Records aber einfach wegdenken. Er stellt nur einen syntaktischen Ausdruck dar, der es dem Compiler erlaubt zu verstehen, was hier deklariert wird:<br />

bestimmte Felder (oder Feldergruppen) im Record, die denselben Speicherplatz belegen. Der Compiler versucht niemals herauszufinden, welcher<br />

Case-Zweig benutzt werden soll. Das liegt vollkommen in der Hand des Entwicklers. Wenn man in einer Variablen vom Typ Person dem Feld<br />

Geburtsort einen Wert zugewiesen hat, dann ist man im Programm selbst dafür verantwortlich, dieses Feld nicht als Land zu interpretieren.<br />

Aus diesem Gr<strong>und</strong> müssen Unions <strong>und</strong> variante Records stets mit Vorsicht eingesetzt werden. Eine Typprüfung durch den Compiler ist nicht möglich.<br />

Unions <strong>und</strong> variante Records bilden die Gr<strong>und</strong>lage für den Typ Variant. Mit dem Typ Variant können Werte dargestellt werden, die ihren Typ<br />

dynamisch ändern. Varianten werden auch dann verwendet, wenn der tatsächliche Typ, mit dem gearbeitet wird, zur Übersetzungszeit unbekannt ist.<br />

Man bezeichnet Varianten auch als sichere "untypisierte" Typen (safe "non-typed" types) oder als "spät geb<strong>und</strong>ene Typen" (late-bo<strong>und</strong> types).<br />

Intern bestehen sie aus einem Datenfeld für den zu speichernden Wert <strong>und</strong> einem weiteren Feld, das den Typ angibt, der im Datenfeld enthalten ist.<br />

Varianten können ganze oder reelle Zahlen, Stringwerte, boolesche Werte, Datum-Uhrzeit-Werte sowie OLE-Automatisierungsobjekte enthalten.<br />

Object Pascal unterstützt explizit Varianten, deren Werte Arrays aufnehmen können, deren Größe <strong>und</strong> Dimensionen wechseln <strong>und</strong> die Elemente eines<br />

der oben genannten Typen enthalten können. Mit dem speziellen Variantenwert VT_EMPTY in <strong>Visual</strong> <strong>C++</strong> <strong>und</strong> varEmpty in Object Pascal wird<br />

angezeigt, daß einer Variante bislang noch keine Daten zugewiesen wurden. Der gr<strong>und</strong>legende Varianten-Typ wird in <strong>Visual</strong> <strong>C++</strong> nur sehr schlecht<br />

unterstützt. Der Entwickler ist für Initialisierungen <strong>und</strong> die Zuweisung an das Feld, das die Typinformation angibt, selbst verantwortlich. Eine spezielle<br />

Klasse ColeVariant kapselt den Variant-Typ ein <strong>und</strong> bietet eine bessere Unterstützung für Varianten (speziell für OLE-Verfahren).<br />

V<strong>C++</strong><br />

Object Pascal<br />

http://ourworld.compuserve.com/homepages/praxisservice/kapit2b.htm (12 of 52) [19.05.2000 15:30:09]

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!