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 2B<br />
writeln(Addiere([2, 8.00, ' 5,00 DM']));<br />
Hier wird eine Integer-Zahl, eine Zahl vom Typ Double <strong>und</strong> ein String miteinander addiert. Die Ausgabe lautet 15.<br />
Operationen auf Varianten laufen langsamer ab als Operationen auf statisch typisierten Werten. Um eine <strong>Vergleich</strong>smöglichkeit zu schaffen, wurde eine<br />
zweite Funktion "AddiereStatisch" geschrieben, deren Parameter als statische Typen deklariert wurden. Eigene Messungen haben gezeigt, daß ein<br />
Aufruf der Funktion AddiereStatisch (mit statischen Parametern) 0,66 µs <strong>und</strong> ein Aufruf <strong>von</strong> Addiere (mit varianten Parametern) 40,65 µs benötigt,<br />
letzterer also ungefähr 60 mal langsamer ist. Die Messungen erfolgten auf einem Rechner mit Pentium-Prozessor (150 MHz Taktrate), 8 kByte<br />
Primär-Cache <strong>und</strong> 512 kByte Sek<strong>und</strong>är-Cache. Die Funktionen wurden jeweils 1 Mio. mal aufgerufen <strong>und</strong> die Zeiten gemessen. Es kann da<strong>von</strong><br />
ausgegangen werden, daß die betreffenden Programmteile ausschließlich im schnellen Cache-RAM abgelaufen sind.<br />
Prozedurale Datentypen ermöglichen es, Prozeduren <strong>und</strong> Funktionen als Einheiten zu behandeln, sie Variablen zuzuweisen <strong>und</strong> als Parameter<br />
übergeben zu können. Man unterscheidet zwei Kategorien <strong>von</strong> prozeduralen Typen: Zeiger auf globale Prozeduren <strong>und</strong> Methodenzeiger.<br />
Zeiger auf globale Prozeduren sind Zeiger auf Prozeduren <strong>und</strong> Funktionen außerhalb <strong>von</strong> Klassen. Der Zeiger speichert die Adresse der Funktion oder<br />
Prozedur. Hier ein Beispiel, bei dem ein prozeduraler Typ als Parameter für die Funktion SetWindowsHook deklariert wird:<br />
typedef<br />
LRESULT(CALLBACK* HookProc)(int code, WPARAM wParam,<br />
LPARAM lParam);<br />
V<br />
C<br />
+<br />
+<br />
int SetWindowsHook(int aFilterType, HookProc aFilterProc);<br />
{...<br />
/* bei einem späteren Aufruf <strong>von</strong> SetWindowsHook erwartet der Compiler beim Parameter aFilterProc die Adresse einer<br />
Funktion, die genauso deklariert wurde wie HookProc. Die Adresse einer Funktion erhält man durch den Adressoperator<br />
&<br />
*/<br />
}<br />
http://ourworld.compuserve.com/homepages/praxisservice/kapit2b.htm (14 of 52) [19.05.2000 15:30:09]