Domanda

E 'possibile accedere ad una funzione di classe di base che ha la stessa firma di quello di una funzione di classe derivata utilizzando un oggetto di classe derivata ?. Ecco un esempio di quello che sto affermando seguente ..

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;
}
È stato utile?

Soluzione

È necessario qualificare completamente il nome del metodo in quanto in conflitto con quello ereditato.

Utilizzare obj.base1 :: test ()

Altri suggerimenti

Non è possibile sostituire un metodo in classe derivata, se non hai fornito una parola chiave virtuale.

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;
}

Quindi il codice di cui sopra è sbagliato. Devi dare:

virtual void test();

nella classe di base

È possibile utilizzare questo:

((base)obj).test();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top