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 2C<br />

Obj2.Print();<br />

}<br />

Ausgabe:<br />

Std.-Konstruktor<br />

Hallo Welt<br />

Hal<br />

Ausgabe:<br />

Std.-Konstruktor<br />

Hallo Welt<br />

Kopie-Konstruktor<br />

Hallo Welt<br />

Object Pascal kennt keinen Kopie-Konstruktor. Als Ersatz wurde in <strong>Delphi</strong>s Klassenbibliothek VCL eine Methode "Assign" deklariert, die<br />

durchgängig in fast allen Klassen existiert:<br />

procedure Assign(Source: TPersistent); virtual;<br />

Sie weist ein Objekt einem anderen zu. Der allgemeine Aufruf lautet:<br />

Destination.Assign(Source);<br />

Dem Objekt Destination wird dadurch der <strong>Inhalt</strong> <strong>von</strong> Source zugewiesen. Das klassenspezifische Überschreiben der Methode Assign (bzw.<br />

der mit Assign verb<strong>und</strong>enen Methode AssignTo) entspricht somit der Definition eines klassenspezifischen Kopie-Konstruktors in <strong>C++</strong>.<br />

Allerdings wird eine Assign-Methode, anders als ein Kopie-Konstruktor, niemals automatisch aufgerufen.<br />

Destruktoren können in <strong>C++</strong> <strong>und</strong> Object Pascal virtuell sein. Ein polymorphes Überschreiben wird notwendig, wenn klassenspezifische<br />

Freigabeaktionen ausgeführt werden müssen. Virtuelle Konstruktoren sind nur in Object Pascal zulässig <strong>und</strong> werden im Zusammenhang<br />

mit Metaklassen verwendet.<br />

2.3.6.6 Metaklassen<br />

Metaklassen sind in <strong>C++</strong> nicht definiert; neben Object Pascal unterstützen z.B. die Sprachen Smalltalk <strong>und</strong> CLOS (Common Lisp Object<br />

System) Metaklassen. Eine Metaklasse ist ein Datentyp, dessen Werte Klassen sind. Während eine Klasse einen Typ definiert, der<br />

Objektreferenzen aufnehmen kann, kann eine Variable vom Typ einer Metaklasse Referenzen auf Klassen enthalten. Deshalb werden<br />

Metaklassen auch "Klassenreferenztypen" genannt.<br />

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

Object Pascal<br />

Klasse => Objekt<br />

Metaklasse => Klasse => Objekt<br />

zu lesen als:<br />

Instanzen <strong>von</strong> Klassen sind Objekte<br />

zu lesen als:<br />

Instanzen <strong>von</strong> Metaklassen sind Klassen<br />

Instanzen <strong>von</strong> Klassen sind Objekte<br />

Der Wertebereich einer Metaklasse umfaßt die Klasse, für die sie deklariert wurde <strong>und</strong> alle deren Nachfahren, insbesondere auch jene, die<br />

http://ourworld.compuserve.com/homepages/praxisservice/kapit2c.htm (24 of 33) [19.05.2000 15:30:15]

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!