Designfrage
-
hi
ich habe eine basisklasse
class Base { public: // Funktionen mit denen man das Handle verschieben, vergrößern usw kann. private: Handle* m_handle; };und dann habe ich eine Klasse die von der klasse "Base" erbt.
class Derived : public Base { public: // noch mehr funktionen um das handle in "Base" zu steuern. };nun stellt sich die frage, wie greife ich auf das handle von base aus derived zu?
wie würdet ihr das machen?danke!
-
Protected Getter für den Handler in Base bereitstellen, oder
Methoden, die du in Derived schreiben willst stattdessen in Base schreiben.
-
hallo zeus!
danke für deine antwort.
die 1. variante hatte ich auch schon im sinn, aber dann wäre der getter in derived public.
die 2. variante ist ungünstig, weil es noch mehr derived klassen gibt -> codeverdoppelung.gibt es keinen besseren Weg?

-
Sichtbarkeitsbereich auf protected stellen, dafür ist er da.
-
die 1. variante hatte ich auch schon im sinn, aber dann wäre der getter in derived public.
Nein, eben nicht, der soll ja genau protected sein!
Simon
-
mhhhhhm schrieb:
die 1. variante hatte ich auch schon im sinn, aber dann wäre der getter in derived public.
Nein. Wenn der Getter in Base protected ist und derived public erbt, ist der getter in Derived trotzdem protected.
die 2. variante ist ungünstig, weil es noch mehr derived klassen gibt -> codeverdoppelung.
Wenn das was du im einen derived mit dem handler machst, das Selbe ist was du im anderen derived machst, dann gehört die Methode in die Basisklasse, um Codeverdopplung zu vermeiden.
Wenn du in den verschiedenen deriveds verschiedenes mit dem Handler machst, gehörts in die deriveds und du brauchst den protected Getter.
-
Wobei man
protectedim allgemeinen mitpublicfast gleichsetzen kann:class base { private: handler* m_handler; protected: handler* get_handler() { return m_handler; } }; class derived : public base { public: handler* get_handler() { return base::get_handler(); } };Der Zugriff kann somit durchaus auch fraglich sein, ob das Design der Hierarchie korrekt ist. Grundsätzlich (Richtlinie) sollten abgeleitete Klassen nie auf die privaten Member der Basisklasse zugreifen müssen.
Grüssli
-
oh so war das!
na dann vielen dank leute!
