gpt4 book ai didi

c++ - 虚函数是否覆盖基类中同名的非虚函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:38 24 4
gpt4 key购买 nike

是否符合以下标准?你能引用这个部分吗?

struct A
{
virtual void func() = 0;
};

struct B
{
void func(){}
};

struct C : public A, public B
{
virtual void func(){ B::func(); }
};

我在 VS2010 中收到一个奇怪的编译器警告,其等效但更复杂的代码指向 func 在最派生类中的声明:warning C4505: unreferenced local function has been已删除。我不知道为什么编译器认为类中声明的虚函数是局部函数;但是我无法在更简单的示例中重现该警告。

编辑:

我想出了一个小的警告案例。我认为我走错了路,假设它与函数隐藏有关。这是重现案例:

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 错误。

最佳答案

代码格式正确。 C::func 覆盖 A::funcB::func 是一个不相关的函数。规范中写道 (10.3/2):

If a virtual member function vf is declared in a class Base and in a class Derived, derived directly or indirectly from Base, a member function vf with the same name, parameter-type-list, cv-qualification, and ref-qualifier (or absence of same) as Base::vf is declared, then Derived::vf is also virtual (whether or not it is so declared) and it overrides111 Base::vf.

C::funcA::func 同名,A::func 是虚拟的,因此 C::func 覆盖 A::funcB::funcA::func 无关;我不知道规范中是否有任何语言明确解决了这种情况。

Visual C++ 11 Beta 编译器不会针对此代码发出任何警告或错误。

关于c++ - 虚函数是否覆盖基类中同名的非虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com