C++ Interfaces: Abstrakte Klassen & Pure Virtual Functions
C++-Interfaces werden via abstrakte Klassen realisiert – nicht zu verwechseln mit Datenabstraktion (Trennung Implementierung/Daten).
Klasse wird abstrakt, indem mind. eine Funktion als rein virtuell (pure virtual) deklariert wird: = 0 in Deklaration.
class Box {
public:
virtual double getVolume() = 0; // Pure virtual
private:
double length, breadth, height;
};
Zweck abstrakter Klassen (ABC)
- Bereitstellung geeigneter Basisklasse für Vererbung.
- Können nicht instanziiert werden – dienen nur als Interface.
- Instanziierungsversuch → Kompilierfehler.
Unterklasse eines ABC muss alle virtuellen Funktionen implementieren → unterstützt das Interface. Fehlende Implementierung + Instanziierungsversuch → Kompilierfehler.
Klassen, die instanziiert werden können = konkrete Klassen.
Beispiel: Shape-Hierarchie
#include <iostream>
using namespace std;
class Shape {
public:
virtual int getArea() = 0; // Interface
void setWidth(int w) { width = w; }
void setHeight(int h) { height = h; }
protected:
int width, height;
};
class Rectangle: public Shape {
public:
int getArea() { return width * height; }
};
class Triangle: public Shape {
public:
int getArea() { return width * height / 2; }
};
int main() {
Rectangle Rect; Triangle Tri;
Rect.setWidth(5); Rect.setHeight(7);
cout << "Rectangle area: " << Rect.getArea() << endl; // 35
Tri.setWidth(5); Tri.setHeight(7);
cout << "Triangle area: " << Tri.getArea() << endl; // 17
return 0;
}
Abstrakte Klasse definiert Interface getArea(), zwei Klassen implementieren formelspezifisch.
Designstrategie
Objektorientiertes System nutzt abstrakte Basisklasse für gemeinsamen, standardisierten Interface für externe Anwendungen. Durch Vererbung entstehen abgeleitete Klassen mit ähnlicher Operation.
- Fähigkeiten (öffentliche Funktionen) = reine virtuelle Funktionen in ABC.
- Implementierungen in abgeleiteten Klassen (anwendungsspezifisch).
Architektur erlaubt einfache Erweiterung um neue Anwendungen, auch nach Systemdefinition.
C Sprache
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- C++ Klassentemplates meistern: Ein praktischer Leitfaden
- Java abstrakte Klassen und Methoden: Ein umfassender Leitfaden
- C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
- C# Abstrakte Klassen: Praktisches Tutorial mit Code-Beispielen
- Java meistern: Objekte, Klassen und Kern-OOP-Konzepte verstehen
- Java Abstraktion erklärt: Code vereinfachen & Lesbarkeit steigern