13

我遇到过这个代码示例,我记得我以前看过它,但我不知道它的用途和作用是什么?我在互联网上搜索过,但没有运气。

代码:

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

4 回答 4

21
} g_c;

这里g_c被声明为类类型的对象C

这样的构造使您能够创建未命名类型的对象,例如:

class  //Nameless class!
{
   //data members

}obj1, obj2;

在这个例子中,obj1andobj2被声明为一个没有被赋予任何名字的类类型的对象——这个类是无名的!在这种情况下,您不能以常规意义(即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!

希望有帮助!

于 2013-07-24T19:30:48.663 回答
14

它是以下的简写:

class C
{
    ....
};

C g_c;
于 2013-07-24T19:29:43.720 回答
2

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

A x;

其中 A 可能是一个类的名称。

但是,除了使用预先存在的类类型,您还可以在声明新类类型的变量的同时定义该类:

class { ... } x;

或定义类并为其命名:

class A { ... } x;

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

class A { ... };

但你不必离开变量。

于 2013-07-24T19:42:43.030 回答
1

这只是创建该类类型对象的一种方式。结构主要使用它们来初始化新变量。

于 2013-07-24T19:37:31.280 回答