C++
VeröffentlichtRevision 1

Klassen, Kapselung und gültige Zustände

Eine Klasse definiert einen eigenen Typ mit Daten und Funktionen. Kapselung bedeutet, innere Darstellung und kontrollierte Benutzung zu trennen. Benutzer sollen nicht jede Einzelheit verändern müssen oder dürfen.

Klassen, Kapselung und gültige Zustände#

Eigene Datentypen und Klassen · Lektion 40 von 60

Voraussetzungen: struct, Parameter. Lernziel: Du schützt Regeln eines Datentyps durch passende Zugriffsmöglichkeiten.

Eine Klasse definiert einen eigenen Typ mit Daten und Funktionen. Kapselung bedeutet, innere Darstellung und kontrollierte Benutzung zu trennen. Benutzer sollen nicht jede Einzelheit verändern müssen oder dürfen.

C++
1#include <iostream>2 3class Zaehler {4public:5    bool erhoehen() {6        if (wert_ >= 100) {7            return false;8        }9        ++wert_;10        return true;11    }12 13    int wert() const {14        return wert_;15    }16 17private:18    int wert_{};19};20 21int main() {22    Zaehler zaehler;23    if (zaehler.erhoehen()) {24        std::cout << zaehler.wert() << '\n';25    }26}

Die Ausgabe ist 1. public bezeichnet die von außen benutzbare Schnittstelle. private begrenzt den Zugriff auf die Implementierung und ausdrücklich berechtigte Freunde. Der Unterstrich in wert_ ist nur eine Namenskonvention für private Member.

Invarianten#

Eine Invariante ist eine Eigenschaft, die an den vorgesehenen Benutzungsgrenzen immer gelten soll. Für den Zähler lautet sie: Der Wert liegt zwischen 0 und 100. Das öffentliche erhoehen wahrt diese Regel. Außenstehender Code kann wert_ nicht direkt auf -20 setzen.

Ein beliebiger Setter wie setWert(int) würde den Schutz nur dann erhalten, wenn er ebenfalls prüft. Ein Getter liest Daten, ein Setter verändert sie. Automatisch für jedes Feld Getter und Setter zu schreiben erzeugt noch kein gutes Klassenmodell.

const bei Memberfunktionen#

Das const hinter wert() bedeutet, dass diese Memberfunktion das Objekt über den gewöhnlichen Zugriff nicht verändert. Sie kann deshalb auch für einen konstanten Zähler aufgerufen werden. Eine Methode ist eine verbreitete andere Bezeichnung für eine Memberfunktion.

class und struct haben weitgehend dieselben Möglichkeiten. Bei class sind Member standardmäßig privat, bei struct öffentlich. Verwende struct oft für einfache zusammengehörige Daten und class, wenn eine kontrollierte Schnittstelle fachliche Regeln schützt.

Übung#

Warum gibt erhoehen() einen Wahrheitswert zurück?

Lösung

Der Aufrufer kann zwischen erfolgreicher Erhöhung und erreichter Grenze unterscheiden. Der interne Wert bleibt auch bei Misserfolg gültig. Eine still ignorierte Grenze wäre schwerer nachvollziehbar.

Weiterlernen#

Zurück: Benannte Zustände mit enum class · Kursübersicht · Weiter: Konstruktoren, Destruktoren und Rule of Zero

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.