C++ ist eine imperative Programmiersprache, die verschiedene Stile des Programmierens unterstützt, bzw. ermöglicht.
Beispiel:
double sqrt(double arg) { // Code to compute the square root } void main(void) { double root2 = sqrt(2); ... }
Beispiel: Definition der Benutzungsschnittstelle:
// Schnittstellen-Datei "stack.h" void push(char); char pop(void); const int stack_size = 100;
#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 }
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; }
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;; }