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