2011-06-03 99 views
1

可能重复:
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关键字来导入基类的抽象方法。但为什么 ?既然它是公开的,我不明白为什么这是必要的。

谢谢。

回答

1

使用

的使用关键字用于导入 命名空间(或命名空间的部分) 到当前范围见本 Why should I use the "using" keyword to access my base class method?

Also this

。示例代码: 例如,以下代码 将整个std名称空间导入 当前作用域,以便 之间的名称空间可以在“std ::”之前不使用 的情况下使用。

using namespace std;

可替换地,下一个代码段 刚刚导入 std名字空间的一个单一的元素到当前 名称空间:

使用std ::法院;

相关主题:命名空间

使用的命名空间规格/使用 - 不是我想你要使用它。

+3

最好留下,作为评论和关闭重复,恕我直言。 – Xeo 2011-06-03 15:52:38

+0

好的。很简单。我一直认为编译器正在使用每种可用方法的参数。谢谢并抱歉重复,使用非常普遍,很难找到与关键字真正相关的内容。 – 2011-06-03 15:58:23