public vererbt zu public und protected


  • Administrator

    Grüsse zusammen,

    Hätte jetzt am liebsten "Problem bei Veerbung" geschrieben, doch leider steht des schon da *grml* ^^
    So musste ich halt was sinnvolleres finden.

    Ich habe eigentlich ein simples Problem und trotzdem sehe ich keine Lösung. Ich zeige des mal an einem Beispiel:

    Ich habe eine BaseClass mit zwei Public Member-Funktionen.

    class CBaseclass
    {
        // Konstruktoren und Destruktoren und bla bla bla 
        // Funktionen //
    public:
        func1();
        func2();
    }
    

    Dann habe ich eine abgeleitet Klasse. In dieser möchte ich nun func1 weiterhin als public haben und func2 neu als protected. Dass heisst ich kann die neue Klasse weder als public noch als protected von der CBaseclass ableiten. Ist das überhaupt möglich? Oder muss ich da eine andere Lösung finden?

    Und noch eine Bonusfrage:
    Wenn ich ein operator = definiere in einer Basisklasse, dann eine neue Klasse ableite von der Basisklasse, muss ich dann den operator = ganz neu schreiben? Gibt es da keine möglichkeit zumindest für die Werte der Basisklasse, den Basisoperator aufzurufen?

    Danke im voraus!

    Grüssli



  • zu 1)
    Ich denke, dass es nicht geht. Zumindest bei Delphi ist es so, dass man den Sichtbarkeitsgrad einer Funktion nicht senken kann. Also, aus einer public-Funktion kann man keine private oder protected machen.
    Das macht auch wenig Sinn, da man ja einfach ein Objekt der abgeleiteten Klassen casten kann und so die Funktion aus der Basisklasse heraus aufrufen kann.



  • Ich bin mir nicht ganz sicher, ob das was bringt, aber versuch's mal mit folgender Konstruktion:

    class Derived : protected CBaseclass
    {
      //alle Funktionen sind werden als protected geerbt
    public:
      using CBaseclass::func1;//func1 hochstufen auf public
    };
    

    Zum zweiten: Du könntest am Anfang des eigenen op= den Basisoperator direkt aufrufen:

    Derived& operator=(const Derived& from)
    {
      Base::operator=(from);
      //eigene Verarbeitung
      return *this;
    }
    


  • CStoll schrieb:

    public:
      using CBaseclass::func1;//func1 hochstufen auf public
    

    👍 Genial 👍


  • Administrator

    wirklich genial! Das kann ich dringend und sehr gut gebrauchen. Vielen dank. Und das mit dem operator funktioniert auch. Jetzt hab ich nur noch eine Frage, doch die setz ich in nen neuen Thread, der Übersichts halber, bzw. suche zuerst nochmals im Forum danach ^^

    Grüssli und danke nochmals


Anmelden zum Antworten