以下标准是否符合?你能引用该部分吗?虚拟函数是否覆盖基类中同名的非虚函数?
struct A
{
virtual void func() = 0;
};
struct B
{
void func(){}
};
struct C : public A, public B
{
virtual void func(){ B::func(); }
};
我得到的指向func
的声明在派生类最多相当于但是更复杂的代码在VS2010一个奇怪的编译器警告:warning C4505: unreferenced local function has been removed
。我不知道为什么编译器认为在类中声明的虚函数是本地的;但是我不能在一个简单的例子中重复这个警告。
编辑:
我想通了,你的提醒小摄制情况。我认为我假设它与功能隐藏有关,所以走错了路。这里的摄制情况:
template<typename T>
struct C
{
int GetType() const;
virtual int func() const; // {return 4;} // Doing this inline removes the warning <--------------
};
template<typename T>
int C<T>::GetType() const
{
return 0;
}
template<>
int C<int>::GetType() const
{
return 12;
}
template<typename T>
int C<T>::func() const
{
return 3;
}
// Adding the following removes the warning <--------------------
// template<>
// int C<int>::func() const
// {
// return 4;
// }
我相当肯定这仅仅是一个VS2010的错误。
“等价但更复杂的代码......不能在更简单的示例中重新报警”。那么他们可能不等同。 –
上面的代码不会产生您在VS2010中提到的警告。它没有任何语义错误,但设计的选择对我来说很奇怪。 – AJG85
我仍在试图弄清楚如何重新制作警告 - 我将在/如果我这样做时进行编辑。 – David