Ereditarietà e sovraccarico di metodi

Perché il compilatore C ++ dà questo errore? Perché posso accedere a lol () da B, ma non posso accedere a rofl () [senza parametri]. Dov’è il trucco?

class A { public: void lol(void) {} void rofl(void) { return rofl(0);} virtual void rofl(int x) {} }; class B : public A { public: virtual void rofl(int x) {} }; int _tmain(int argc, _TCHAR* argv[]) { A a; a.lol(); a.rofl(1); a.rofl(); B b; b.lol(); b.rofl(1); b.rofl(); //ERROR -> B::rofl function does not take 0 arguments return 0; } 

B::rofl(int) ‘nasconde’ A::rofl() . Per avere i sovraccarichi di rofl , devi dichiarare che B sta using A::rofl; .

 class B : public A { public: using A::rofl; ... }; 

Questa è una mossa saggia di C ++: ti avverte che probabilmente hai anche bisogno di sovrascrivere il metodo A::rofl() in B O lo fai, o dichiari esplicitamente di utilizzare gli altri sovraccarichi di A