gpt4 book ai didi

c++ - 基类的私有(private)虚函数被派生的私有(private)虚函数隐藏

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:26 26 4
gpt4 key购买 nike

下面的代码

class A
{
public:
void g(int x)
{
f(x);
}

protected:
virtual void f(int) = 0;
};

class B: public A
{
protected:
virtual void f(float) = 0;

private:
void f(int x) override final
{
f(float(x));
}
};

class C: public B
{
private:
void f(float) override final {}
};

int
main()
{
C c;
c.g(1);

return 0;
}

使用 g++ -Woverloaded-virtual 编译会产生上述警告:

x.cc:19:7: warning: ‘virtual void B::f(int)’ was hidden [-Woverloaded-virtual]
void f(int x) override final
^
x.cc:28:7: warning: by ‘virtual void C::f(float)’ [-Woverloaded-virtual]
void f(float) override final {}
^

我不明白这里隐藏了什么。从 C 的范围来看,f 只有一种可能的重载,因为 B::f(int)C< 中是私有(private)的.

B 的范围来看,有两个,但都在 B 中明确命名。

最佳答案

警告告诉您函数 C::f(float) 隐藏了 B::f(int),那是因为 it does .访问说明符不影响重载,因此 B::f(int) 是私有(private)的这一事实并不重要。即使 B::f(int) 是公开的,它也不会被考虑用于重载解析,这就是“隐藏”所指的。

关于c++ - 基类的私有(private)虚函数被派生的私有(private)虚函数隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42236912/

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