使用C ++关键字

时间:2011-06-03 15:47:11

标签: c++

  

可能重复:
  Why shall I use the “using” keyword to access my base class method?

您好,

我无法找到在下列情况下我需要关键字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语句,则Visitor void operator()(Ast&);中声明和定义的公共非虚方法在从{{AVisitor调用时不可见1}}。例如:

AVisitor v;
Ast* ast = new Node(); // Node is-a Ast
v(*ast); // should call Visitor::operator()(Ast&);

不会编译,说方法void operator()(Ast&)与AVisitor中的任何内容都不匹配。唯一的解决方案是使用using关键字来导入基类的抽象方法。但为什么 ?由于它是公开的,我不明白为什么需要这样做。

谢谢。

1 个答案:

答案 0 :(得分:1)

看到这个 Why should I use the "using" keyword to access my base class method?

Also this

  使用

     

using关键字用于导入   命名空间(或命名空间的一部分)   进入当前范围。示例代码:   例如,以下代码   将整个std命名空间导入   当前范围使项目内   该命名空间可以在没有   在“std ::”之前。

     

使用namespace std;

     

或者,下一个代码段   只需导入一个元素   std命名空间进入当前   名称空间:

     

使用std :: cout;

     

相关主题:namespace

使用is表示命名空间规范/使用 - 而不是因为我认为你正在尝试使用它。