Auf protected Member der Basisklasse zugreifen?



  • Hi,

    in der VCL wird in Delphi bspw. folgender Code verwendet:
    (Control ist dabei eine TWinControl Eigenschaft)

    Canvas.Font := TWinControlClass(Control).Font;
    
    if Control is TCustomCheckBox then
          FWordWrap :=  TCustomCheckBox(Control).WordWrap;
    

    Wenn ich das gleiche in C++ versuche bspw. über dynamic_cast geht das nicht weil Font und WordWrap protected Member von TControl respektive TButtonControl sind. Ich hab dann noch festgestellt, dass das in Delphi auch nur geht, weil die alle in derselben Unit sind und innerhalb einer Unit die Sichtbarkeiten dort nicht gelten.

    Meine Frage ist jetzt:
    Gibt es eine Möglichkeit das irgendwie in C++ umzusetzen? Also für alle Elemente einer bestimmten Basisklasse auf die o.g. protected Eigenschaften zuzugreifen? Oder muss ich auf alle möglichen abgeleiteten Klassen prüfen, in der die Eigenschaften dann published sind? Nur die kann ich ja gar nicht alle kennen, vor allem wenn man später noch ne weitere Klasse von TCustomCheckBox etc. ableitet. Ich hab aktuell allein 3 Klassen, die von TCustomCheckBox abgeleitet sind und bei TWinControl sind das ja dutzende...

    (Ist das nicht auch der Sinn von Basisklassen, dass man ne gemeinsame Schnittstelle hat? Warum sind dann in der VCL die ganzen Eigenschaften protected?)



  • @drummi Ich glaube, dass Stichwort, was du suchst ist Public inheritance.
    Also sowas:

    class derived : public base
    {
    //Code Kram 
    }

Anmelden zum Antworten