关闭类括号后的名称是什么意思?

时间:2013-07-24 19:27:53

标签: c++

我遇到了this代码示例,我记得我以前见过它而且我不知道它是什么以及它做了什么?我在互联网上搜索但没有运气。

代码:

class C
{
    int x; // a non-static variable, implicitly private

public:
    C() : x(0) {} // default constructor

    // a static member function, which uses a non-static variable perfectly well
    static int Incr(C& instance) { return ++(instance.x); }
} g_c;

int main(void)
{
    C c2;
    return C::Incr(g_c) + C::Incr(c2);
}

最后一个班级括号后的g_c是什么意思?

4 个答案:

答案 0 :(得分:14)

} g_c;

此处g_c被声明为类类型C的对象。

此类构造使您可以创建未命名类型的对象:

class  //Nameless class!
{
   //data members

}obj1, obj2;

在此示例中,obj1obj2被声明为类类型的对象,但没有给出任何名称 - 该类是无名!在这种情况下,您不能以传统意义声明对象(即Type obj1, obj2;意义)。所以这个结构可以帮助你做到这一点。

您甚至可以在无名(并声明无名类的对象)时从其他命名的类派生:

class : public A, public B //Nameless class is deriving from A and B
{
   //data members

}obj1, obj2;

简而言之,此构造确保用户无法创建更多对象,除非某些恶意程序员使用/误用/滥用C ++ 11(或模板):

decltype(obj1) obj3; //hehe!

希望有所帮助!

答案 1 :(得分:13)

这是简写:

class C
{
    ....
};

C g_c;

答案 2 :(得分:2)

使用格式type variable_name;声明变量。例如:

A x;

其中A可以是班级的名称。

但是,您可以在声明使用它的变量的同时定义类,而不是使用预先存在的类类型:

class { ... } x;

或定义类并为其命名:

class A { ... } x;

在C ++中,通常只定义类并为其命名,但不要使用变量:

class A { ... };

但你不必离开变量。

答案 3 :(得分:1)

这只是一种创建该类型对象的方法。结构主要用于初始化新变量。