private und protected member functions
-
public member functions sind ja taeglich Brot,
aber wann benutzt man protected und private member functions?
-
Wenn man sie braucht.
-
Wenn du zum Beispiel Hilfsfunktionen in der Klasse hast, von denen der Benutzer der Klasse nichts mitbekommen soll. private wird dann verwendet, wenn die Hilfsfunktion nur von der Basisklasse verwendet wird, protected wenn es auch den abgeleiteten Klassen zur Verfügung stehen soll.
Beispiel:
class foo { public: int f1 () { return help ()+1; } int f2 () { return help ()+2; } private: int help () { return 5; } }
Hoffe, ich war hilfreich.
-
aber wann benutzt man protected und private member functions?
Ein weiteres Anwendungsgebiet: Template-Method bzw. Non-virtual-Interface-Pattern. In beiden Fällen delegieren öffentliche nicht-virtuelle Methoden an private/protected-virtuelle Methoden. Vorteil: Du kannst bestimmte Bedingungen forcieren bzw. das Skelett eines Algos vorgeben, die Implementation aber trotzdem in abgeleiteten Klassen variieren.
Wenn du zum Beispiel Hilfsfunktionen in der Klasse hast, von denen der Benutzer der Klasse nichts mitbekommen soll.
Dabei gilt es aber zwei Dinge zu beachten: Hilfsfunktionen sollten nur Teil der Klasse sein, wenn sie Zugriff auf Member benötigen. Andernfalls implementiert man sie besser als freie Funktionen in der cpp-Datei (static oder innerhalb eines unbenannten Namensraum). Desweiteren deuten viele Hilfsfunktionen häufig darauf hin, dass deine Klasse mehr als eine Aufgabe hat und du besser eine weitere Klasse definieren solltest. In dieser neuen Klasse sind die Hilfsfunktionen dann oft "normale" öffentliche Methoden.
Protected-Methoden sind generell das Interface für abgeleitete Klassen. Auch hier gilt wieder: wenn du neben öffentlichen Methoden auch viele protected-Methoden hast (abzüglich der die durch NVI enstehen), deutet dies darauf hin, dass deine Klasse zuviel macht. In diesem Fall lohnt es sich häufig die Klasse in ein Interface und eine "Common-Implementation"-Klasse zu zerlegen.
-
Public und Private sind mir klar
aber protected? wenn man sie auch in abgeleiteten klassen braucht?
z.b.
ClassA // hat private public und protected //wenn ich jetzt im int main ClassA a; // mache und dann a. // da kommt ja jetzt die liste von den public methoden die private nicht ClassB : public ClassA b. // da kommen doch jetzt auch nur die public methoden ClassB : protected ClassA b. // da kommen jetzt die public+protected aber die private nicht?
-
Die protected functions haben erstmal nichts mit protected inheritance zu tun.
protected member functions definieren ein Interface fuer alle abgeleiteten Klassen dieser Klasse. Stichwort: implementation hiding