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.

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

DefWindowProc auf, die der Standardbehandlung <strong>von</strong> Windows-Botschaften dient.<br />

Man kann für das Versenden <strong>von</strong> Botschaften eine alternative Routine schreiben, die sich mehr an die Syntax der Windows-Funktion<br />

SendMessage anlehnt:<br />

function SendMsg(ZielObject: TObject; var Message): Boolean;<br />

begin<br />

if ZielObject nil then begin<br />

ZielObject.Dispatch(Message);<br />

SendMsg:= True;<br />

end else<br />

SendMsg:= False;<br />

end;<br />

Im obigen Beispiel-Programm könnte dann das Versenden einer Botschaft statt durch<br />

ObjA.Dispatch(Nachricht);<br />

durch einen Aufruf<br />

SendMsg(ObjA, Nachricht);<br />

erfolgen.<br />

Auch innerhalb <strong>von</strong> Botschaftsbehandlungs-Methoden kann die ererbte Botschaftsbehandlungs-Methode der Vorfahr-Klasse mit Hilfe<br />

einer inherited-Anweisung aufgerufen werden. Der var-Parameter wird beim inherited-Aufruf automatisch als Parameter übergeben, ohne<br />

daß er explizit angegeben werden müßte. Botschaftsbehandlungs-Methoden unterstützen auf diese Weise noch besser dynamische<br />

Konzepte. Ein Objekt sendet eine Botschaft <strong>und</strong> der Empfänger entscheidet selbst, was er mit der eingehenden Nachricht macht: ob er sie<br />

überhaupt auswertet, ob er die Nachricht anderen mitteilt, ob er dem Sender darauf antworten will usw. Ob eine Botschaft behandelt<br />

werden soll (vom Objekt "verstanden wird"), wird allein dadurch bestimmt, ob eine Botschaftsbehandlungs-Methode mit der<br />

Botschaftsnummer definiert wurde. In jedem Fall steht immer eine ererbte Implementierung zur Verfügung.<br />

Die durch Dispatch aufgerufene Methode ähnelt im weitesten Sinne einer Software-Interrupt-Behandlungsroutine. Der "Interrupt" wird<br />

durch das Verschicken einer Nachricht mittels Dispatch ausgelöst. Es findet also insbesondere kein ressource-fressendes Polling statt, bei<br />

dem ein Objekt in einer Endlosschleife prüfen würde, ob irgendwelche Botschaften eingegangen sind, um dann in einer bestimmten Weise<br />

darauf zu reagieren.<br />

Das Schlüsselwort "static" hat in <strong>C++</strong> auch im Zusammenhang mit Klassen-Feldern <strong>und</strong> Methoden besondere Bedeutung. Ein Feld, das in<br />

einer Klasse mit static deklariert wurde, wird <strong>von</strong> allen Variablen dieser Klasse (<strong>von</strong> allen Objekten) gemeinsam genutzt. Es wird nur<br />

einmal gespeichert <strong>und</strong> ist deswegen nicht <strong>von</strong> einer bestimmten Instanz abhängig. Static-Felder müssen explizit deklariert <strong>und</strong> im globalen<br />

(dateiweiten) Block definiert werden. Sie wirken im Kontext der zugeordneten Klasse wie globale Variable.<br />

class A{<br />

public:<br />

static int x;<br />

···<br />

};<br />

int A::x = 8;<br />

// explizite Definition nötig<br />

void main()<br />

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