2010-05-14 56 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