Vererbung Verständnisfrage



  • Hallo zusammen,

    folgendes Szenario: Ich habe eine Basisklasse und eine davon Abgeleitete.
    In der Basisklasse gibt es eine Memberv. welche ein Zeiger auf die Basisklasse
    ist. Kann ich nun über diese Variable auf eine Methode in der abgeleiteten zugreifen?



  • ist die Basisklasse ein singleton?



  • Ich glaube nicht dass es geht, die Basis Klasse weiss ja nicht obs überhaupt eine von ihm abgeleitete Klasse gibt.
    Vielleicht hilft dir das:
    virtual function: http://de.wikibooks.org/wiki/C++-Programmierung:_Polymorphie
    Callback: http://www.oopweb.com/CPP/Documents/FunctionPointers/Volume/CCPP/FPT/m_fpt.html



  • Zeig mal ein einfaches Beispiel (Code). Gehen tut es grundsätzlich wenn die Basisklasse die abgeleitete Klasse kennt (muss man halt casten, was kein Problem ist wenn man weiss was man tut), die Frage ist bloss ob es sicher ist. Bzw. viel besser: ob nicht vielleicht eine virtuelle Funktion die bessere Lösung wäre.



  • curry-king schrieb:

    Hallo zusammen,

    folgendes Szenario: Ich habe eine Basisklasse und eine davon Abgeleitete.
    In der Basisklasse gibt es eine Memberv. welche ein Zeiger auf die Basisklasse
    ist. Kann ich nun über diese Variable auf eine Methode in der abgeleiteten zugreifen?

    Also eigentlich macht man sowas mit virtuellen Funktionen....

    class Base {
    protected:
        virtual void internalF() = 0;
    public:
        void f() { 
            // base-spezifisches Zeug
            internalF(); 
        }
        ~Base() {}
    };
    
    class Derived {
    protected:
        void internalF() { 
            // Derived-spezifisches Zeug
        }
    };
    
    int main() {
        Base* b = new Derived();
        b->f(); // kann erst Base-spezifisches Zeug machen 
                // und dann Derived::internalF() aufrufen.
        delete b;
        return 0;
    }
    

    Reicht sowas nicht für Dich ?
    Man muß in Base sowieso Wissen über die Schnittstellen seiner "Deriveds" hinterlegen ... da kann man auch den Machnismus der Sprache nutzen (virtual function call).

    Gruß,

    Simon2.



  • @Simon2:

    "internalF" kann man auch private machen. Ist auch nicht unüblich 😉



  • hustbaer schrieb:

    @Simon2:

    "internalF" kann man auch private machen. Ist auch nicht unüblich 😉

    Hmmmm, ich habe mal gelernt, die "VererbungsSchnittstelle" solle man protected machen, aber ist auch nicht zwingend (oder vielleicht in diesem Fall unnötig) ...

    Gruß,

    Simon2.



  • unnötig gibts ned ^^
    die vorgesehene Verwendung sollte schon konkret bestimmen, welche zugriffsmodifizier ne variable / funktion hat.

    Ist internalF vorgesehen, innerhalb der abgeleiteten klassen verwendet zu werden, ist protected an der stelle genau richtig ^^
    genau das sagt mir ein protected: Hey, wenn du von mir ableitest, darfst du diese funktionen verwenden !

    genau so wie eigentlich die virtualitaet des destruktors aussagen sollte, ob ne klasse fuer die vererbung gedacht ist oder nicht.

    Ciao ...



  • RHBaum schrieb:

    unnötig gibts ned ^^ ...

    In diesem Thread schon. 😉
    Da es sich nur um eine Skizze ohne konkreten fachlichen Hintergrund handelt, ist die Frage, ob internalF() von der abgeleiteten Klasse aufgerufen werden können soll, nicht zu klären .... und damit "protected" ebenso richtig/falsch wie "private" ... ich hatte nur keine Lust, doppelt zu schreiben (zumal es bei der Frage nicht um den Zugriffsschutz geht).

    Gruß,

    Simon2.


Anmelden zum Antworten