Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
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]