【发布时间】:2012-04-03 05:19:11
【问题描述】:
在http://www.gotw.ca/gotw/005.htm 的这段代码示例中,我震惊地得知在 Derived 类中,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++:技巧 33
标签: c++ inheritance