C++ Academy · Lektion

Abstrakte Klassen und rein virtuelle Methoden

Definieren Sie Schnittstellen mit rein virtuellen Methoden und setzen Sie Verträge für abgeleitete Klassen durch.

Lektion 3 von 413 Schritte

Abstrakte Klassen und rein virtuelle Methoden ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist eine abstrakte Klasse?

Eine abstrakte Klasse besitzt mindestens eine rein virtuelle Funktion, die mit = 0 deklariert wird. Sie können sie nicht direkt instanziieren.

class Animal {
public:
    virtual void speak() const = 0;   // pure virtual
    virtual ~Animal() = default;
};

// Animal a;     // ERROR: cannot instantiate

Rein virtuelle Funktionen

= 0 kennzeichnet eine Funktion als Funktion ohne Standardimplementierung. Abgeleitete Klassen müssen sie überschreiben, bevor die Klasse instanziiert werden kann.

Die Schnittstelle implementieren

Abgeleitete Klassen stellen konkrete Implementierungen für jede rein virtuelle Funktion bereit.

class Dog : public Animal {
public:
    void speak() const override {
        std::cout << "Woof!\n";
    }
};

Dog d;
d.speak();      // Woof!

Abstrakte Klassen als Schnittstellen

Eine abstrakte Klasse, die nur rein virtuelle Methoden und keine Datenmember besitzt, fungiert wie eine Schnittstelle in anderen Sprachen.

class Drawable {
public:
    virtual void draw() const = 0;
    virtual ~Drawable() = default;
};

Implementierung und Schnittstelle kombinieren

Abstrakte Klassen können sowohl rein virtuelle als auch konkrete Methoden enthalten. Rein virtuelle Methoden definieren den Vertrag; konkrete Methoden stellen gemeinsames Verhalten bereit.

class Logger {
public:
    void logInfo(const std::string& msg) { log("INFO", msg); }
    void logError(const std::string& msg) { log("ERROR", msg); }
protected:
    virtual void log(const std::string& level, const std::string& msg) = 0;
};

Rein virtuelle Funktion mit Standardimplementierung

Eine rein virtuelle Funktion kann einen Funktionskörper besitzen – nützlich als Standardimplementierung, die abgeleitete Klassen aufrufen können.

class Base {
public:
    virtual void f() = 0;
};
void Base::f() {
    std::cout << "default behavior\n";
}

class Derived : public Base {
public:
    void f() override {
        Base::f();          // call the default
        std::cout << "extra\n";
    }
};

Über Zeiger und Referenzen verwenden

Polymorpher Code hält abstrakte Objekte über Zeiger oder Referenzen auf den Basistyp.

void perform(const Animal& a) {
    a.speak();
}

In Containern speichern

Vektoren können abstrakte Typen nicht als Werte aufnehmen. Verwenden Sie Zeiger, typischerweise Smart Pointer.

std::vector<std::unique_ptr<Animal>> zoo;
zoo.push_back(std::make_unique<Dog>());
zoo.push_back(std::make_unique<Cat>());
for (auto& a : zoo) a->speak();

Wann Sie abstrakte Klassen verwenden sollten

Verwenden Sie sie, wenn:

  • Sie eine gemeinsame Schnittstelle für mehrere voneinander unabhängige Implementierungen definieren möchten
  • Sie einen Basistyp für polymorphe Container benötigen
  • Sie Verhalten über Unterklassen einschleusen möchten (Template-Method-Muster)

Alternativen: Concepts und Templates

Für Polymorphismus zur Compile-Zeit ersetzen C++20-Concepts und Templates abstrakte Klassen häufig – ohne Laufzeitkosten. Verwenden Sie virtual, wenn Polymorphismus zur Laufzeit benötigt wird.

Stolperfalle: Slicing

Übergeben Sie abstrakte Klassen per Referenz oder Zeiger. Eine Übergabe per Wert ist ohnehin unmöglich, da ein abstrakter Typ nicht instanziiert werden kann – bei einer Übergabe abgeleiteter Klassen per Wert würde jedoch Slicing auftreten.

Kurzer Test

Was macht eine Klasse in C++ abstrakt?

Zusammenfassung

Abstrakte Klassen – also Klassen mit mindestens einer rein virtuellen Methode – definieren Schnittstellen für polymorphen Code. Verwenden Sie sie mit Zeigern oder Referenzen, häufig Smart Pointern, um Verhalten zur Laufzeit zu verteilen.

Kostenlos starten

Lerne C++ mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Abstrakte Klassen und rein virtuelle Methoden“ kostenlos?

Ja — der vollständige Text von „Abstrakte Klassen und rein virtuelle Methoden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Abstrakte Klassen und rein virtuelle Methoden“?

Definieren Sie Schnittstellen mit rein virtuellen Methoden und setzen Sie Verträge für abgeleitete Klassen durch. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Abstrakte Klassen und rein virtuelle Methoden“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einfache und mehrfache Vererbung
  2. Virtuelle Funktionen und die vtable
  3. Abstrakte Klassen und rein virtuelle Methoden
  4. Vererbung vs. Komposition: Kompromisse
← Zurück zu C++ Academy