Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the name after the closing class bracket means?

Tags:

c++

I've encountered this code example and I remembered I've seen it before and I didn't know what it is for and what it does? I've searched on the internet but without luck.

Code:

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);
}

What does g_c after the last class bracket means?

like image 353
SLC Avatar asked Jul 24 '13 19:07

SLC


2 Answers

} g_c;

Here g_c is declared to be an object of the class type C.

Such construct enables you to create object(s) of unnamed type as:

class  //Nameless class!
{
   //data members

}obj1, obj2;

In this example, obj1 and obj2 are declared to be objects of a class type which has not been given any name — the class is nameless! In such situation, you cannot declare objects in a conventional sense (i.e Type obj1, obj2; sense). So this construct helps you do that.

You can even derive from other named classes while being nameless (and declaring the objects of the nameless class):

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

}obj1, obj2;

In short, this construct ensures that the user wouldn't be able to create more objects than intended, unless some evil programmer uses/misuses/abuses C++11 (or template) as:

decltype(obj1) obj3; //hehe!

Hope that helps!

like image 138
Nawaz Avatar answered Sep 29 '22 13:09

Nawaz


It's shorthand for:

class C
{
    ....
};

C g_c;
like image 20
Drew McGowen Avatar answered Sep 29 '22 13:09

Drew McGowen