可能重复:
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
关键字来导入基类的抽象方法。但为什么 ?由于它是公开的,我不明白为什么需要这样做。
谢谢。
答案 0 :(得分:1)
看到这个 Why should I use the "using" keyword to access my base class method?
使用
using关键字用于导入 命名空间(或命名空间的一部分) 进入当前范围。示例代码: 例如,以下代码 将整个std命名空间导入 当前范围使项目内 该命名空间可以在没有 在“std ::”之前。
使用namespace std;
或者,下一个代码段 只需导入一个元素 std命名空间进入当前 名称空间:
使用std :: cout;
相关主题:namespace
使用is表示命名空间规范/使用 - 而不是因为我认为你正在尝试使用它。