Frage

Ist es möglich, auf eine Basisklassenfunktion zuzugreifen, die mithilfe eines abgeleiteten Klassenobjekts die gleiche Signatur wie eine abgeleitete Klassenfunktion hat. Hier ist ein Beispiel von dem, was ich unten sage.

class base1 {
public:
    void test()
    {cout<<"base1"<<endl;};
};

class der1 : public base1 {
public:
    void test()
    {cout<<"der1"<<endl;};
};

int main() {
der1 obj;
obj.test(); // How can I access the base class 'test()' here??
return 0;
}
War es hilfreich?

Lösung

Sie müssen den Methodennamen vollständig qualifizieren, da er mit dem ererbten Konflikt steht.

Verwenden Sie obj.base1 :: test ()

Andere Tipps

Sie können eine Methode in der abgeleiteten Klasse nicht außer Kraft setzen, wenn Sie kein virtuelles Schlüsselwort angegeben haben.

class base1
{
    public:
        void test()
        {
            cout << "base1" << endl;
        };
};

class der1 : public base1
{
    public:
        void test()
        {
            cout << "der1" << endl;
        };
};

int main()
{
    der1 obj;
    obj.test(); // How can I access the base class 'test()' here??
    return 0;
}

Der obige Code ist also falsch. Sie müssen geben:

virtual void test();

in Ihrer Basisklasse

Sie können dies verwenden:

((base)obj).test();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top