dumme Vererbungsfrage



  • hallo, ich habe eine basis-klasse und möchte von ihr private ableiten,
    einige Funktionen möchte ich dabei aber in der neuen Klasse public sichtbar machen, geht das einfacher, als wrapper methoden zu schreiben?

    also :

    class base
    {
     void a();
    };
    
    class derived : private base
    {
    // hier soll irgendwie der zugriff von a nach public geändert werden
    // ohne den expliziten aufruf von base::a()
    public :
    
     void a() { base::a(); }
    }
    

    vielleicht bin ich auch schon zu müde 🙂



  • du kannst afaik zugriffsspezifizierer (was fuern wort ...) auch explizit fuer einzelne methoden angeben.
    einzelheiten muesstest du dir ergooglen, genaue syntax hab ich nicht im kopf, wahrscheinlich genauso oder aehnlich wie bei der klasse.

    mfg,
    julian



  • class base
    {
     void a();
    };
    
    class derived : private base
    {
    public :
    
     using base::a;
    }
    

    macht "a" public, ohne signatur, aber bis jetzt ohne gewähr
    :xmas1:

    stimmt mich aber schon nachdenklich, das ich sowas noch nie gesehen habe,
    der sinn ist eben, das ich private ableiten muss, weil die "is-an" relation nicht ganz gegeben ist, ich mir aber den code der wrapper sparen möchte



  • Ich nehme mal an, daß die Funktion a im public-Teil deklariert ist:

    class base
    {
    public:
     void a();
    };
    

    Dann kannst du mittels "using base::a;" Zugriff darauf ermöglichen.
    Falls du überladene Funktionen hast, werden alle damit automatisch angesprochen. Für einzelne müßtest du demnach dann doch die Wrapper-Methoden benutzen.

    Aber du kannst mittels using nicht die Zugriffsklasse erhöhen (d.h. wenn base::a privat deklariert ist, sollte ein Compiler-Fehler erscheinen).


Anmelden zum Antworten