可能重复:
Why shall I use the “using” keyword to access my base class method?C++关键字使用
嗨,
我无法找出原因我需要的关键字using
在以下情况:
// Pure virtual class.
class Visitor
{
public:
void operator()(Ast&);
virtual void operator()(Node&) = 0;
};
// Define the default visit methods.
class DefaultVisitor : public Visitor
{
public:
using Visitor::operator(); // First 'using' needed.
virtual void operator()(Node&);
};
// A visitor using DefaultVisitor's behaviour.
class AVisitor : public DefaultVisitor
{
public:
using Visitor::operator(); // Second 'using' needed.
virtual void operator()(Node&);
};
如果没有这两个using
声明,则在从AVisitor
调用时,不会显示在Visitor
,void operator()(Ast&);
中声明和定义的public非虚方法。例如:
AVisitor v;
Ast* ast = new Node(); // Node is-a Ast
v(*ast); // should call Visitor::operator()(Ast&);
将不会编译,说方法void operator()(Ast&)
不匹配AVisitor中的任何内容。唯一的解决方案是使用using
关键字来导入基类的抽象方法。但为什么 ?既然它是公开的,我不明白为什么这是必要的。
谢谢。
最好留下,作为评论和关闭重复,恕我直言。 – Xeo 2011-06-03 15:52:38
好的。很简单。我一直认为编译器正在使用每种可用方法的参数。谢谢并抱歉重复,使用非常普遍,很难找到与关键字真正相关的内容。 – 2011-06-03 15:58:23