next up previous contents index
Next: Das erste C++-Projekt Up: C++ ist nicht C: Previous: Geschichte

Sprachkonzepte

C++ ist eine imperative Programmiersprache, die verschiedene Stile des Programmierens unterstützt, bzw. ermöglicht.

Programmierstil Prozedurales Programmieren

 

tex2html_wrap5155

Beispiel:

    double sqrt(double arg)
    { // Code to compute the square root
    }

    void main(void)
    { double root2 = sqrt(2);
      ...
    }

Programmierstil Modulares Programmieren

 

tex2html_wrap5157

Beispiel: Definition der Benutzungsschnittstelle:   

    // Schnittstellen-Datei "stack.h"
    void push(char);
    char pop(void);
    const int stack_size = 100;

Implementierung:   

    #include "stack.h"
    static char s[stack_size];
    static char* top=s;

    void push(char c)
    { // Ueberlauf pruefen und push
    }

    char pop(void)
    { // Unterlauf pruefen und pop
    }

Programmierstil Datenabstraktion

 

tex2html_wrap5159

Beispiel:

    class stack_id { /* ... */ };

    stack_id create_stack(int size);
    void push(stack_id, char);
    char pop(stack_id);
    void destroy_stack(stack_id);

Ohne Unterstützung der Programmiersprache unterscheiden sich solche benutzerdefinierten Typen in wesentlichen Aspekten von den eingebauten Typen (z.B. Wertzuweisung, Operatoren).

In C++ können sich Benutzertypen so verhalten wie eingebaute:

    class complex
    { double re,im;
      public:
      complex(double r, double i) { re=r; im=i;}
      complex(double r)           { re=r; im=0;}
      friend complex operator+(complex, complex);
         ...
    };
    complex operator+(complex a, complex b)
    {return complex(a.re + b.re, a.im + b.im);}

kann wie folgt benutzt werden:

    void f()
    { complex a = 2.3;
      complex b = 1 + a;
      complex c = b + complex(1.5, 2.5);
      c = c + a;
    }

Objektorientierte Programmierung

     Probleme bei der Datenabstraktion: Wartung, Anpassung, Erweiterung.

Beispiel:

   enum kind{ circle, rectangle, ...}; 
   class shape { 
         point center;  // Mittelpunkt;
         kind k;        // Form;
         public:
         point where() { return center;}
         void draw();
         };

   void shape::draw()
   { switch (k)
     { case circle :    // Kreis zeichnen;
                        break;
       case rectangle : // Rechteck zeichnen;
                        break;
       ...
     }
   }

Bei der Erweiterung um geometrische Formen, muß an vielen Stellen im Programmtext geändert werden. Dazu müssen insbesondere alle Programmquellen vorhanden sein.

Objektorientierte Programmierung löst dieses Problem durch den Vererbungsmechanismus:

 

   class shape { 
         point center;  // Mittelpunkt;
         public:
         point where() { return center;}
         virtual void draw();
         };
   class circle : public shape {
         void draw();
         };
   void circle::draw()
   { // Zeichne einen Kreis;;
   }

tex2html_wrap5161


next up previous contents index
Next: Das erste C++-Projekt Up: C++ ist nicht C: Previous: Geschichte

Peter Pfahler, 1997