2014-09-11 12 views
5

È possibile chiamare la funzione virtuale foo (int) da B senza utilizzare ciò che viene fatto nel commento?polimorfismo C++ e funzione virtuale

class A { 
public: 

    virtual void foo (char *) { 
    } 

    virtual void foo (int) { 
    } 
}; 

class B : public A { 
public: 

    void foo (char *) { 
    } 

    //void foo (int i) { 
    // 
    // A::foo(i); 
    //} 
}; 

B b; 
b.foo(123); // cannot convert argument 1 from 'int' to 'char *' 
+1

Si prega di fissare il rientro ..... il la dichiarazione di 'virtual void foo (int)' a prima vista sembra essere il corpo di 'virtual void foo (char *)'. Ai compilatori non interessa la formattazione dispari, ma gli umani ... –

+1

@AndreKostur FWIW, il bizzarro rientro degli overload di 'foo' è stato introdotto da un editor, non dall'OP. – Angew

risposta

8

Sì, è possibile. Il problema qui è che la funzione B::foo(char*)nasconde il nome della funzione ereditata A::foo(int), ma è possibile riportarlo in ambito di B con una dichiarazione using:

class B : public A { 
public: 

    void foo (char *) { 
    } 

    using A::foo; 
};