可能重复:
C++重载决议
我遇到了一个问题,在我的类重写了它的基类的函数后,所有重载的函数版本都被隐藏了.这是设计还是我做错了什么?
防爆.
class foo
{
public:
foo(void);
~foo(void);
virtual void a(int);
virtual void a(double);
};
class bar : public foo
{
public:
bar(void);
~bar(void);
void a(int);
};
Run Code Online (Sandbox Code Playgroud)
然后,下面会给出一个编译错误,说明条中没有(双)函数.
main()
{
double i = 0.0;
bar b;
b.a(i);
}
Run Code Online (Sandbox Code Playgroud) 我有一个C++基类,它声明了一个带有两个不同签名的虚方法.
一旦我覆盖派生类中的一个虚方法签名,编译器(g ++ 4.6.3和g ++ 4.7)就不再能够将该方法与同一派生类中的第二个签名进行匹配.
如果我只将SPECIALIZE_ONEARG定义为1,下面的示例代码将无法编译.为了使其再次编译,我还必须将PASSTHRU_TWOARG定义为1.使用"PASSTHRU"方法并不理想,因为效率和真实类层次结构更深入,我宁愿不要在调用基类时硬连接.
这种行为是否特定于g ++,或者我只是想尝试做一些C++不支持的事情?
#define SPECIALIZE_ONEARG ( 0 )
#define PASSTHRU_TWOARG ( 0 )
class base
{
public:
virtual int myMethod( char a ) { return 1; }
virtual int myMethod( char a, int b ) { return 2; }
};
class derived : public base
{
public:
#if SPECIALIZE_ONEARG
virtual int myMethod( char a ) { return 3; }
#endif // SPECIALIZE_ONEARG
#if PASSTHRU_TWOARG
virtual int myMethod( char a, int b ) { return …Run Code Online (Sandbox Code Playgroud)