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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

{<br />

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

A ObjA1;<br />

A ObjA2;<br />

}<br />

ObjA1.x = 4;<br />

printf("%d\n", A::x); // Ausgabe 4<br />

printf("%d\n", ObjA2.x); // Ausgabe 4<br />

Object Pascal kennt keine static-Felder. Die einzige (nicht sehr elegante) Möglichkeit, static-Felder nachzuahmen besteht darin, diese durch<br />

globale Variable zu ersetzen. Nach Möglichkeit sollten sie im Implementation-Abschnitt einer Unit definiert werden, so daß sie nicht im<br />

gesamten Programm sichtbar sind.<br />

Beide Sprachen können Methoden definieren, die bereits vor einer Klassen-Instanzierung aufgerufen werden können. <strong>C++</strong> nennt diese<br />

static-Methoden <strong>und</strong> Object Pascal bezeichnet sie als Klassenmethoden (gekennzeichnet durch das Wort class). Innerhalb solcher<br />

Methoden kann nicht auf Felder, Properties <strong>und</strong> normale Methoden zugegriffen werden.<br />

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

class A{<br />

public:<br />

static void Print(void);<br />

};<br />

void A::Print(void)<br />

{<br />

printf("Print!\n");<br />

};<br />

void main()<br />

{<br />

A::Print();<br />

// Aufruf als Klassenmethode<br />

}<br />

A* ObjA = new A;<br />

ObjA->Print();<br />

// Aufruf als Objektmeth.<br />

Object Pascal<br />

type<br />

A = class<br />

public<br />

class procedure Print;<br />

end;<br />

class procedure A.Print;<br />

begin<br />

writeln('Print!');<br />

end;<br />

var ObjA: A;<br />

begin<br />

A.Print;<br />

// Aufruf als Klassenmethode<br />

ObjA:= A.Create;<br />

ObjA.Print;<br />

// Aufruf als Objektmeth.<br />

end.<br />

Syntaktischer Unterschied: Einer static-Methode darf in <strong>C++</strong> bei der Methodenimplementierung nicht ein zweites Mal das Schlüsselwort<br />

static vorangestellt werden. In Object Pascal dagegen muß das Schlüsselwort class auch vor der Methodenimplementierung ein zweites Mal<br />

erscheinen. Static-/Klassenmethoden werden auch in den Klassenbibliotheken eingesetzt, um z.B. neue Objektinstanzen anzulegen:<br />

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

Im Makro DECLARE_DYNCREATE:<br />

static CObject* CreateObject();<br />

Object Pascal<br />

In der Klassendefinition zu TObject:<br />

class function NewInstance:<br />

TObject; virtual;<br />

http://ourworld.compuserve.com/homepages/praxisservice/kapit2c.htm (18 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!