Jas*_*n C 4 c++ virtual gcc overriding overloading
我对以下代码的编译器错误感到困惑:
class Base {
public:
virtual ~Base () { }
virtual void func () { }
virtual void func (int) { }
virtual void another () { }
virtual void another (int) { }
};
class Derived : public Base {
public:
void func () { }
};
int main () {
Derived d;
d.func();
d.func(0);
d.another();
d.another(0);
}
Run Code Online (Sandbox Code Playgroud)
使用gcc 4.6.3,上面的代码在d.func(0)处导致错误,说Dervied :: func(int)是未定义的.
当我还为Derived添加func(int)的定义时,它就可以了.当我在Derived中既未定义func()也未定义func(int)时,它也有效(如"另一个"的情况).
显然这里有一些关于虚拟重载函数的规则,但这是我第一次遇到它,我不太明白它.有人能告诉我这到底发生了什么吗?
NPE*_*NPE 11
当您覆盖func()时Derived,隐藏func(int).
gcc 可以警告你:
$ g++ -Wall -Woverloaded-virtual test.cpp
test.cpp:5:16: warning: 'virtual void Base::func(int)' was hidden [-Woverloaded-virtual]
test.cpp:12:8: warning: by 'virtual void Derived::func()' [-Woverloaded-virtual]
Run Code Online (Sandbox Code Playgroud)
你可以解决这个问题using:
class Derived : public Base {
public:
using Base::func;
void func () { }
};
Run Code Online (Sandbox Code Playgroud)
有关为什么会发生这种情况的讨论,请参阅为什么派生类中的重写函数会隐藏基类的其他重载?