看一看下面的代碼:using聲明在派生類中絲毫不掩飾從基類派生的功能相同
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;
}
按我的理解,在C
的B::f()
應隱藏其被帶到C
的A::f()
通過使用聲明;如果是這樣,那爲什麼c.C::f()
仍然叫A::f()
?
如果c.C::f()
電話A::f()
,這應該意味着在C
範圍,f()
應始終參考A::f()
,這是使用聲明的功能。那麼爲什麼在C::test()
,撥打f()
仍然評估爲B::f()
?
@LiuNick新增。 – Angew 2015-02-11 09:55:59
只是如此專業!謝謝! – 2015-02-11 09:59:28
@LiuNick堆棧溢出說「謝謝」的方式是[接受解決問題的答案](http://stackoverflow.com/help/someone-answers)(每個問題最多隻能接受一個答案)。這標誌着問題已經解決,並給予回答者和你一些聲望。 – Angew 2015-02-11 10:05:00