Ein Beispiel für OOP

Ein kurzes Beispiel, bitte beachten das ich nicht alles im Detail erkläre, dies folgt im nächsten Kapitel, jetzt soll es erstmal eine Übersicht geben:
#ifndef WASSERTANK_H
#define WASSERTANK_H
class WasserTank // (1)
{
    unsigned int inhalt;// (2)
public:
    WasserTank();//(3)
    ~WasserTank();//4)
    void Regen();//(5)
    unsigned int Wasserstand();//(6)
    bool nehmeWasser(unsigned int& menge);//(7)
};
#endif // WASSERTANK_H


Dies ist nur der Header der Klasse.  Aber er enthält die vollständige Deklaration der Klasse WasserTank:
  1. Das Schlüsselwort class (oder auch struct) leitet die Deklaration einer Klasse ein, dahinter folgt der Klassennamen.
  2. Eine Membervariable vom Typ unsigned int wird deklariert. Sie soll für uns den Füllstand des Wassertanks verwalten. Das vorherige private: bedeutet dass auf die Membervariable inhalt nur innerhalb der Klasse Wassertank zugegriffen werden kann. Das nachfolgende public: bedeutet das die Memberfunktionen von ausserhalb über das Objekt der Klasse aufgerufen werden können.
  3. Dies nennt sich Konstruktor, und ist für die Initialisierung des Objektes im Speicher verantwortlich.
  4. Der Gegenpart zum Konstruktor, der Destruktor. Hier wird Speicher freigegeben und ähnliches, wenn das Objekt im Speicher zerstört wird.
  5. Eine Memberfunktion, welche den Tank füllen soll.
  6. Diese Methode soll den Füllstand innerhalb des Tanks zurückgeben.
  7. Diese Methode soll die Wasserentnahme aus dem Wassertank simulieren.
Die wassertank.cpp sieht dann so aus:
#include "wassertank.h"

WasserTank::WasserTank():inhalt(0)//(1)
{
}
WasserTank::~WasserTank()//2)
{
   
}
void WasserTank::Regen()//(3)
{
    ++inhalt;
}
unsigned int WasserTank::Wasserstand()//(4)
{
    return inhalt;
}
bool WasserTank::nehmeWasser(unsigned int& menge)//(5)
{
    if(menge <= inhalt)
    {
        inhalt -= menge;
        return true;
    }
    menge = inhalt;
    inhalt = 0;
    return false;
}


Die Implementation/Definition unserer Klasse erfolgt in der cpp Datei:
  1. Der Konstruktor, es wird die Membervariable mit 0 initialisiert. Dies könnte man auch im Codeblock des Konstruktors tun (inhalt = 0;), allerdings empfiehlt sich die  hier genutzte Initialisierungsliste.
  2. Der Destruktor, unsere Klasse hat nichts, was sie zerstören müsste, da ja alles auf dem Stack liegt.
  3. Wenn es regnet, zählen wir den Inhalt um eins hoch.
  4. Return inhalt; gibt den Wert des Inhalts zurück. Zugriff auf den eigentlichen Speicher von inhalt bekommt der Aufrufer aber nicht. Der Rückgabe wert ist eine temporäre Variable, eine Kopie von inhalt.
  5. Die Methode zur Entnahme von Wasser aus dem Tank. Der Aufrufer gibt seinen Wunschwert an,  und bekommt diesen oder den Inhalt des Tankes, wenn dieser kleiner als die angefragte Menge ist. Deshalb wird der Parameter als Referenz übergeben. Man könnte dies auch als Returnwert implementieren, da return true/false hier etwas redundant ist.