下面的C++代码我认为是正确的,但当使用"-Woverloaded-virtual"编译时会产生一些警告,这个警告是虚假的还是这段代码确实存在问题?
如果这个警告是虚假的,我该如何避免它?在派生类中定义所有异常虚拟变体可以消除警告,但也许有更好的解决方案。
G++命令:
g++ -c -Woverloaded-virtual test.cpp
test.cpp:22:18: warning: ‘virtual void intermediate::exception(const char*)’ was hidden [-Woverloaded-virtual]
test.cpp:32:18: warning: by ‘virtual void derived::exception()’ [-Woverloaded-virtual]
C++代码
using namespace std;
class base
{
public:
virtual void exception() = 0;
virtual void exception(const char*) = 0;
};
class intermediate : public base
{
public:
virtual void exception()
{
cerr << "unknown exception" << endl;
}
virtual void exception(const char* msg)
{
cerr << "exception: " << msg << endl;
}
};
class derived : public intermediate
{
public:
virtual void exception()
{
intermediate::exception("derived:unknown exception");
}
};
void exception(const char* msg) = delete;
会起作用。编辑:不,删除这样的重载是错误的。但是如果在设计良好的代码中真的有意这样做,我会感到惊讶;您应该能够像处理基类实例一样处理派生类的实例。 - Daniel H