3   Windows-Programm "Taschenrechner"

3.2   Konstanten

Zu einem Parser-Objekt gehören automatisch zwei Konstanten, die in arithmetischen Ausdrücken verwendet werden können, p und e. Weitere Konstanten können definiert werden. Eine Konstanten-Definition legt immer einen Namen und einen zugehörigen Wert fest, letzterer kann durch einen arithmetischer Ausdruck repräsentiert sein, dessen Wert vom Parser berechnet wird, eine nachfolgende Definition einer Konstanten mit einem bereits existierenden Namen überschreibt den alten Wert.

 

3.2.1   "Globales" Parser-Objekt

Im Abschnitt 3.1 wurde ein Objekt vom Typ ClParser als lokale Variable in der Member-Funktion CCalcDlg::OnOK definiert, das nach dem Abarbeiten dieser Funktion seine Gültigkeit verlor, um bei einem erneuten Aufruf von OnOK erneut erzeugt zu werden. Beim Arbeiten mit (zusätzlich zu den beiden Standardkonstanten) definierten Konstanten ist das natürlich nicht sinnvoll, weil diese mit dem Verschwinden des ClParser-Objekts auch wieder verschwinden würden.

Abhilfe schafft hier das Erzeugen des ClParser-Objekts als globale Variable (außerhalb aller Funktionen). Dann muß natürlich die (sich gegebenenfalls ändernde) Information darüber, wie die Argumente der Winkelfunktionen interpretiert werden sollen, gesondert ausgewertet werden, weil diese beim Erzeugen des Objekts noch nicht verfügbar ist. Dafür steht die Parser-Funktion set_angle_unit_P zur Verfügung, die in CCalcDlg::OnOK dann die jeweils gewünschte Interpretation einstellt. Es ist nur eine kleine Änderung erforderlich:

  • Im Arbeitsbereich wird in der "Karteikartei Klassen" unter Calc Klassen und CCalcDlg durch Doppelklick auf OnOK() die Datei CalcDlg.cpp geöffnet, der Cursor befindet sich vor der Funktion CCalcDlg::OnOK. Die Definition des Parser-Objekts wird nun vor die Funktion gezogen (Default-Konstruktor), dafür wird in der Funktion die Argumenteinstellung für die Winkelfunktionen jeweils mit set_angle_unit_P aktualisiert:

         
    ClParser DerParser ;
        void CCalcDlg::OnOK()
        {
            UpdateData (TRUE) ;
            DerParser.set_angle_unit_P (m_GradRad == 1 ?
                             PARSER_RADIAN : PARSER_GRAD) ;
            //  ... Rest der Funktion bleibt unverändert ...

Diese kleine Änderung hat folgende Auswirkungen:

  • Das Objekt DerParser wird bereits beim Programmstart erzeugt und verschwindet erst mit dem Programmende. Alle Veränderungen (z. B. zusätzliche Konstanten) bleiben erhalten.
     
  • Das Objekt DerParser ist in allen Funktionen sichtbar (gegebenenfalls muß das bei Funktionen in anderen Dateien mit extern dem Compiler mitgeteilt werden). Alle Funktionen können also die Member-Funktionen des Parsers mit diesem Objekt aufrufen.
     
  • Aus der Sicht des Benutzers hat sich mit dieser Änderung nichts verändert, wovon man sich durch Aktualisieren des Projekts und Starten des Programms überzeugen kann.
B18

Bei der Eingabe dieser Änderung dürfte sich erstmals die im Abschnitt 3.1.4 vorgenommene Änderung (Parser.h dem Projekt hinzufügen) vorteilhaft bemerkbar gemacht haben: Beim Schreiben des Punktes nach dem Objekt DerParser öffnete sich das Fenster mit allen Member-Funktionen und Member-Variablen der Klasse ClParser (Abbildung oben). Wenn man sich in diesem Fenster bewegt, blitzen für die public-Funktionen kurze Beschreibungen auf (die Entwicklungsumgebung entnimmt diese Information der Kommentarzeile unmittelbar vor dem Prototyp der entsprechenden Member-Variablen in der Klassen-Deklaration). Mit Doppelklick (oder Return) kann man den Namen direkt in den Programmtext übernehmen.

home

Zurück zum Anfang

www.D@nkert.de

mail

Zurück

Mail2

D

nkert.de

Weiter