homedukeOOP mit Java: Abstrakte Datentypen in C++ Prof. Dr. Uwe Schmidt FH Wedel

Abstrakte Datentypen in C++

weiter

weiter

Beispiel: ein Stack in C++

als abstrakte Klasse ohne Implementierungsteil

class Stack {
 
public:
 
  //--------------------
  // die Attribut-Funktionen
 
  virtual
  int isEmpty() const = 0;
 
  virtual
  int top() const = 0;
 
  //--------------------
  // die modifizierenden Funktionen
 
  virtual
  Stack & push(int e) = 0;
 
  virtual
  Stack & pop() = 0;
 
 
  //--------------------
  // die Vorbedingungen
 
  virtual               // oder nicht ???
  int pre_pop() const {
    return
      ! isEmpty();
  }
 
  virtual
  int pre_top() const {
    return
      ! isEmpty();
  }
 
  //--------------------
  // der Destruktor
 
  virtual
  ~Stack() {}
};
 
weiter
merke
Das späte Binden muss explizit durch das Schlüsselword virtual gekennzeichnet werden.
merke
Eine Klasse ist abstrakt, wenn mindestens eine Funktion als abstrakt gekennzeichnet ist: ... = 0;

weiter

eine konkrete Implementierung der Stack Klasse

#include "Stack.cc"
 
class SimpleStack : public Stack {
 
private:
 
  // die Datenfelder: nicht nach aussen sichtbar
 
  struct StackStruct {
    unsigned top;
    int  elems[100];
  } * s;
 
 
public:
 
  //--------------------
  // der Konstruktor
 
  SimpleStack() {
    s = new StackStruct;
    s->top = 0;
  }
 
  //--------------------
  // der Destruktor
 
  ~SimpleStack() {
    delete s;
  }
 
  //--------------------
  // die Attribut-Funktionen
 
  virtual
  int isEmpty() const {
    return
      s->top == 0;
  }
 
  virtual
  int top() const {
    return
      s->elems[s->top-1];
  }
 
  //--------------------
  // die modifizierenden Funktionen
 
  virtual
  Stack & push(int e) {
    s->elems[s->top++] = e;
    return
      *this;
  }
 
  virtual
  Stack & pop() {
    s->top--;
    return
      *this;
  }
 
  // Vorbedingungen sind schon implementiert
};
 
weiter
merke
Unterschiede zwischen Objekten und Referenzen
merke
Speicherfreigabe muss explizit programmiert werden.
Sehr fehlerträchtig.
merke
Innerhalb einer Klasse wird immer noch mit expliziten Zeigern gearbeitet.

Letzte Änderung: 29.04.2013
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel