2011-06-03 87 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