2013-07-24 12 views
5

정적 멤버가 액세스 할 수있는 것과 내가 뭘 발견했는지에 대한 문서를 작성하는 동안 this 코드 예제와 내가 전에 본 적이있는 것을 기억하고 있으며, 그것이 무엇인지, 그리고 그것이 무엇인지 모릅니다.C++ - 닫는 클래스 괄호 뒤에 오는 이름은 무엇을 의미합니까?

저는 인터넷에서 검색했지만 운이 없었습니다. 보통 사람들은 동일한 문제로 더 많은 잠재 고객을 생각하지 않고 문제를 해결하려고하기 때문에 일반적인 이름을 만들어서 쉽게 만들 수 없기 때문입니다 검색하기!

코드 :

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 무엇 관심이 있어요?

도움을 주시면 감사하겠습니다.

답변

10
} 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

추가 지식에 감사드립니다. 네가 할 수 있다는 것을 나는 몰랐다. –

12

그건 속기를 위해 : 여기

class C 
{ 
    .... 
}; 

C g_c; 
+0

클래스를 정의한 직후 g_c로 클래스를 인스턴스화하는 것과 비슷합니다. g_c는 일반 클래스 인스턴스와 같습니다. –

+0

예, 맞습니다. –

+0

명확하게 해주셔서 감사합니다. –

1

그저 그런 유형의 클래스의 객체를 만드는 방법 일뿐입니다. 구조체는 주로 새 변수를 초기화하는 데 사용합니다.

1

변수는 type variable_name; 형식을 사용하여 선언합니다. 예 :

A x; 

여기서 A는 클래스의 이름이 될 수 있습니다.

그러나 대신 기존 클래스 형식을 사용하는 당신이 그것을 사용하는 변수 선언, 당신은 같은 시간에 클래스를 정의 할 수 있습니다

class { ... } x; 

또는 클래스를 정의하고 이름을 지정을 :

class A { ... }; 
:

C에서
class A { ... } x; 

++ 그냥 클래스를 정의하고 이름을 지정하지만 변수를 생략 할 것이 일반적이다

하지만 변수를 사용하지 않아도됩니다.