2010-05-14 28 views
15

所以,我碰到,我不太明白,它沿着線去一個有趣的方法來簽名理解是用作參數的「class」關鍵字,爲什麼它在那裏?是否有必要指定或純粹膚淺?C++類作爲參數的方法,而不是模板

+0

我在一類成員認爲這是很好宣言和我瘋了試圖找出它的含義。 'Foo類{ private: class Bar * pointerToBar; }' – Vicro 2015-02-26 09:20:45

回答

16

這是該類的前向聲明。這是實際上是相同的

class SomeClassName; 
void Initialize(std::vector<std::string> & param1, SomeClassName * p); 

有其正向的聲明是有用的許多情況;在this answer to another question中有一個你可以做和不可以做的前向聲明的事情清單)。

+0

它是否作爲前向聲明呢? – ra170 2010-05-14 18:50:35

+0

@ ra170:是的,它的確如此。 – 2010-05-14 18:53:48

+1

「,但你需要使用指針或引用類的實例」 - >如果你只是有一個非定義函數聲明就像在這種情況下,你可以很好地處理值參數。 – 2010-05-14 23:30:44

1

這不是膚淺的。它允許您指定「SomeClassName」作爲參數,即使「SomeClassName」尚未定義。

+0

是否作爲前向聲明呢? – ra170 2010-05-14 18:51:05

1

最膚淺。在C中,當你定義一個結構時:

struct x { 
    int member; 
    char member2; 
}; 

要使用它,你必須使用struct x whatever。如果你想通過自己使用x作爲一個名稱(不帶它前面struct),你必須使用一個typedef

typedef struct x { 
    int member; 
    char member2; 
} x; 

在C++中,然而,第一(不typedef)具有大致相同的效果第二個(都定義爲x,因此您可以單獨使用它,而不是前面的struct)。在C++中,class基本上與struct相同,只是它默認爲private而不是public(對於成員和繼承)。

唯一有差別的地方是在函數聲明的位置上沒有定義範圍內的class

0

是一樣的,你寫的:

for(int i=0;i<10;i++) 

int i; 
for(i=0;i<10;i++) 

類的聲明是一個定義,它的指針

+0

變量i的範圍是不同的。 – iOS 2012-11-22 21:43:43

+0

不回答原來的問題。 – prapin 2012-11-22 21:45:57

相關問題