protected Member / protected Vererbung



  • Hm.. ich bin hier neue aber sind die beide Beispiele eh nicht wirklich relevant?
    Wenn ich eine Klasse „private“ vererbe, dann will ich doch ausdrücklich die externe Nutzung dieser über meine neue Klasse verbieten oder ich erbe halt public?
    Und schon gar nicht möchte ich ( in der Theorie ) eine Methode haben die dann meine private Vererbung wieder sichtbar macht? Ich verliere ja damit die Kontrolle??!!

    😕



  • Es geht nicht darum, dass niemand weiß, dass Foo und Bar etwas gemeinsam haben. Bei normaler Komposition ist das ja auch okay, wenn man für den Member einen getter schreibt. private Vererbung ist nichts anderes als Komposition, nur dass du dir weiterreichende Zugriffsrechte auf einen Member besorgst: eben auf alle protected methoden/member.



  • otze schrieb:

    Es geht nicht darum, dass niemand weiß, dass Foo und Bar etwas gemeinsam haben. Bei normaler Komposition ist das ja auch okay, wenn man für den Member einen getter schreibt. private Vererbung ist nichts anderes als Komposition, nur dass du dir weiterreichende Zugriffsrechte auf einen Member besorgst: eben auf alle protected methoden/member.

    Wieso kann ich dann bei Komposition Bar nicht in ein Foo wandeln? Richtig, weil Bar dann kein Foo mehr ist, sondern ein Foo hat. Dass von außen beides gleich ausschaut, bedeutet doch noch lange nicht, dass es auch ganz genau das gleiche ist!?



  • dot: Wenn du eine solche Konvertierungsmethode bereitstellst, was versprichst du dir dann von privater Vererbung?



  • Darum geht's doch nicht. Es geht um die Tatsache, dass Bar aus Sicht von Bar eben ein Foo ist und nicht nur ein Foo hat. Eben genau was ich zuvor gesagt hab. Wäre dem nicht so, dann könnte ich in dieser Konvertierungsmethode nicht einfach *this returnen. Und genau das wollte ich damit zeigen.



  • otze schrieb:

    private Vererbung ist nichts anderes als Komposition

    Da bin ich auch anderer Meinung. Für mich stellt private-Vererbung in keiner Weise eine Beziehung dar. private-Vererbung bedeutet für mich, dass ich eine bestimmte Funktionalität von irgendetwas übernehmen will, wie z.B. die Funktionalität, dass meine Objekte nicht kopierbar sein sollen:

    class Foo : noncopyable
    

    Michael E. schrieb:

    dot: Wenn du eine solche Konvertierungsmethode bereitstellst, was versprichst du dir dann von privater Vererbung?

    Damit wollte er uns sagen, dass Bar aus ihrer Sicht eben doch ein Foo ist.



  • -.-'


Anmelden zum Antworten