C++-Programmierung/ Objektorientierte Programmierung/ Virtuelle Freunde
Virtuelle Freunde werden in C++ u.A. dazu verwendet, den Aufruf zu vereinfachen. Dadurch versucht man, den Code lesbarer zu machen. Hier ein Beispiel:
- Basis.h
#pragma once
#include <iostream>
class Basis {
public:
friend void f(Basis& b)
{ std::cout << "Basis::ruf_f_auf()..." << std::endl; };
protected:
virtual void ruf_f_auf();
};
inline void f(Basis& b) {
b.ruf_f_auf();
}
- Ableitung.h
#pragma once
#include "Basis.h"
class Ableitung : public Basis {
protected:
virtual void ruf_f_auf()
{ std::cout << "Ableitung::ruf_f_auf()..." << std::endl; }; // "Überschreibt" Methode f(Basis& b)
};
- main.cpp
Wie man sieht, wurde die Methode der Basisklasse mit der ruf_f_auf()
-Methode der Klasse Ableitung
überschrieben.
Der Nachteil von befreundeten Methoden ist nicht nur, dass die Datenkapselung umgangen wird, sondern auch, dass für die dynamische Bindung eine zusätzliche Zeile hinzugefügt werden muss. Um den Effekt eines virtuellen Freunds zu bekommen, sollte die virtuelle Methode versteckt sein (in der Regel protected
). Dies wird auch im Englischen virtual friend function idiom genannt.[1]
Bitte beachten Sie im Beispiel oben, dass die Klasse Ableitung
das Verhalten von der Methode protected virtual ruf_f_auf()
überschriebt, ohne seine eigene Variante für die befreundete Methode f(Base &)
zu haben.
Referenzen
Bearbeiten