C-Programmierung

Abstrakte Klassen

Pure Virtual | | Overloading (Ãœberladen)

Abstrakte Klassen sind Klassen mit mindenstens einer abstrakten Methode (d.h. pure virtual).

Haupteinsatzgebiet sind Interfaces und der Aufruf von noch unbekannten Methoden aus Basisklassen heraus:

Beispiel anhand einer Klasse für Objekte, die eine gewisse Norm einhalten sollen, d.h. konkret DIN-genormte Treppen, die eine gewisses Maß bei der Trittbreite und Stufenhöhe (neben anderen Eigenschaften) einhalten müssen, um das DIN 18065 Siegel zu bekommen:

Abstrakte Basisklasse:

class Stairs
{
   public:

   Stairs() {}
   virtual ~Stairs() {}

   virtual float step_size() = 0; // abstract method
   virtual float step_height() = 0; // abstract method

   bool is_conforming()
   {
      // DIN 18065 (size restrictions in mm)
      return(step_size()>=260 && step_size()<=370 &&
             step_height()>=140 && step_height()<=190);
   }

};

Konkrete abgeleitete Klasse:

class MyStairs: public Stairs
{
   public:

   MyStairs() {}
   float step_size() {return(300);} // required implementation
   float step_height() {return(180);} // required implementation
}

Überprüfung der Norm:

MyStairs stairs;
std::cout << stairs.is_conforming() << std::endl; // yes or no? yes!

Sinn der abstrakten Methoden in obigem Code:

  • Ohne den virtual Bezeichner würden die Methoden der Basisklasse verwendet werden (die es nicht gibt).
  • Ohne die pure virtual Kennzeichnung würden die Methoden in der abgeleiteten Klasse nicht implementiert werden müssen (was die Klasse nutzlos werden ließe).


Pure Virtual | | Overloading (Ãœberladen)

Options: