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:
{
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:
{
public:
MyStairs() {}
float step_size() {return(300);} // required implementation
float step_height() {return(180);} // required implementation
}
Überprüfung der Norm:
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) →