我不明白为什么编译器不喜欢这个,这里是问题的例子:
class A
{
public:
virtual void Expand() { }
virtual void Expand(bool flag) { }
};
class B : public A
{
public:
virtual void Expand() {
A::Expand(true);
Expand(true);
}
};
当我尝试编译时,A::Expand(true);
编译正常,但非作用域 Expand(true);
出现此编译器错误:
'B::Expand' : 函数不接受 1 个参数
最佳答案
对于该行为,您不需要虚拟
方法。派生类中的方法隐藏基类中同名的方法。因此,如果您的派生类中有任何名为 Expand
的函数(即使它是基类中虚方法的重写),基类中的同名方法都不可见,无论他们的签名。
您可以使用 using
使基类方法可见。为此,您可以将 using A::Expand;
添加到 B
的定义中:
class B : public A
{
public:
using A::Expand;
virtual void Expand() { Expand(true); }
};
关于c++ - 为什么重写的虚方法不能在没有显式作用域的情况下看到重载的基类版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10214223/