2015-11-29 80 views
1

我記得我被告知,C++類都有自己的命名空間和類名可以用作範圍分辨率的命名空間,就像這樣:類名可以用作名稱空間嗎?

// Example.h 
class Example { 
    void Private(); 
public: 
    void Public(); 
} 

,後來在一個類似的方式:

// Example.cpp 
#include "Example.h" 
using /*namespace*/ Example; 
void Private() {} 
void Public() {} 

代替:

// Example.cpp 
#include "Example.h" 
void Example::Private() {} 
void Example::Public() {} 

,但我無法找到既不解釋也不在我的書的那一例。簡短的谷歌搜索也是死路一條。 這是真的嗎?

回答

2

不,名稱空間和類是不同的。

但是,名稱空間和類都引入了範圍,可以使用範圍解析運算符::來引用它。

using namespace N;聲明只能應用於命名空間。爲班級做類似的事情是不可能的。您只能在Example以內的特定名稱x中執行using Example::x;以逐個導入它們。

當提供成員​​函數體外線時,您必須編寫Example::Private(),沒有其他選擇。

0

是的,每個類都有自己的名稱空間,類聲明的所有部分都屬於它。

您可能會使用using指令,如您所解釋的here所述。

應當注意的是,你不能具有相同的名稱爲一類聲明命名空間,如下所示:

namespace fubar 
{ 
    class snafu 
    { 
     ... 
    }; 
} 
// Cannot do stuff below (ERROR) 
namespace fubar::snafu; 
{ 
    // this is not valid, once a class always a class 
    // once a namespace, always a namespace 
    // a class makes a namespace also but never JUST a namespace 
} 

千萬要小心,雖然。 '使用'過多可能會對你和那些繼承你的代碼的人產生真正的詭計。

+0

儘管有例子,但我恐怕你不理解我。 [這裏]沒有一個例子/解釋(http://en.cppreference.com/w/cpp/language/using_declaration)描述了我提到的用法。隨時以示例證明我錯了,我會很感激。 –

相關問題