可能重複:
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