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;;
}