可能重复:
C++: rationale behind hiding rule为什么在这个代码中隐藏在基类中的继承函数?
在此代码示例从http://www.gotw.ca/gotw/005.htm,我感到非常震惊地得知,类派生,f(int)
和f(double)
是不可见的!
class Base {
public:
virtual void f(int) {
cout << "Base::f(int)" << endl;
}
virtual void f(double) {
cout << "Base::f(double)" << endl;
}
virtual void g(int i = 10) {
cout << i << endl;
}
};
class Derived: public Base {
public:
void f(complex<double>) {
cout << "Derived::f(complex)" << endl;
}
void g(int i = 20) {
cout << "Derived::g() " << i << endl;
}
};
这是什么原因?
据我所知f(complex<double>)
有一个不同于其他两个继承版本的f()。
- 为什么在这种情况下所有三个都不可见?
- 在这种情况下如何确保Base函数可见?
我可以推荐Effective C++:Tip 33 – inf 2012-03-18 11:53:23