Date un'occhiata al seguente codice:dichiarazione using in classe derivata non nasconde stessa funzione derivata dalla classe base
struct A {
public:
virtual void f(){std::cout << "in A";};
};
struct B : A{
public:
virtual void f(){std::cout << "in B";};
int a;
};
struct C : B{
using A::f;
void test(){f();}
};
int main()
{
C c;
c.f(); // calls B::f, the final overrider
c.C::f(); // calls A::f because of the using-declaration
c.test(); //calls B::f
return 0;
}
Per la mia comprensione, il B::f()
in C
dovrebbe nascondere il A::f()
che viene portato a C
usando-declaration; se sì, allora perché c.C::f()
chiama ancora A::f()
?
If c.C::f()
chiamate A::f()
, che dovrebbe significare che nell'ambito di C
, f()
occorre riferiscono sempre A::f()
, questa è la funzione della dichiarazione using. Quindi, perché nel C::test()
, la chiamata a f()
viene ancora valutata su B::f()
?
@LiuNick Aggiunto. – Angew
solo così professionale! Grazie! –
@LiuNick Il modo Stack Overflow di dire "grazie" è di [accettare la risposta che ha risolto il problema] (http://stackoverflow.com/help/someone-answers) (al massimo una risposta accettata per domanda).Questo contrassegna la domanda come risolta e fornisce sia al rispondente che a te una certa reputazione. – Angew