Modernes C++ und C-Alternativen

Polymorphie und Funktionstabellen

Dynamische Polymorphie lässt Clientcode eine gemeinsame Operation aufrufen.

Was ist Polymorphie und Funktionstabellen?

Dynamische Polymorphie lässt Clientcode eine gemeinsame Operation aufrufen.

Wähle Verhalten über eine gemeinsame Schnittstelle.

Wichtige Punkte

  • Verstehe zuerst den C-Mechanismus.
  • Drücke Ownership durch RAII und Wertsemantik aus.
  • Bevorzuge typsichere Abstraktionen gegenüber Makros und Casts.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

typedef struct Shape Shape;
struct Shape {
    double value;
    double (*area)(const Shape *shape);
};

double square_area(const Shape *shape) {
    return shape->value * shape->value;
}

int main(void) {
    Shape square = {4.0, square_area};
    printf("area=%.1f\n", square.area(&square));
}
Erwartete Ausgabe
area=16.0
C++
Code ausführen →
main.cpp
#include <iostream>

struct Shape {
    virtual double area() const = 0;
    virtual ~Shape() = default;
};

struct Square : Shape {
    double side;

    explicit Square(double value) : side(value) {}
    double area() const override { return side * side; }
};

int main() {
    Square square(4);
    const Shape& shape = square;
    std::cout << "area=" << shape.area() << '\n';
}
Erwartete Ausgabe
area=16

Vergleich zwischen C und C++

C baut Objektpointer und Funktionstabelle explizit; virtuelle C++-Funktionen erzeugen ähnlichen Dispatch und ein virtueller Destruktor schützt das Löschen.

C

C nutzt Namenskonventionen, Callbacks, Makros und Kontextstrukturen.

C++

Sprachfeatures liefern bereichsgebundene, typsichere Abstraktionen.

Übungsaufgaben

Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.

  • Implementiere zuerst den C-Mechanismus.
  • Ersetze manuelles Cleanup durch RAII.
  • Prüfe zusätzliche Allokationen und virtuellen Dispatch.