클래스의 인스턴스를 먼저 만들지 않고 클래스의 정적 멤버에 액세스하여 사용할 수 있습니까? 즉 제임스클래스의 C++ 정적 멤버
답변
null 포인터를 통해 정적 메서드를 호출 할 수도 있습니다.
namespace toolbox
{
void fun1();
void fun2();
}
정적 함수의 클래스 만 사용 정책입니다 : 아래 코드는 작동하지만 다른 한편으로
struct Foo
{
static int boo() { return 2; }
};
int _tmain(int argc, _TCHAR* argv[])
{
Foo* pFoo = NULL;
int b = pFoo->boo(); // b will now have the value 2
return 0;
}
예 전역
을 위해 땅을 투기의 일종으로 클래스를 치료 :
class mytoolbox
{
public:
static void fun1()
{
//
}
static void fun2()
{
//
}
static int number = 0;
};
...
int main()
{
mytoolbox::fun1();
mytoolbox::number = 3;
...
}
네, 반원들이 무엇을 의미하는지 static
정확하게이다 :
struct Foo {
static int x;
};
int Foo::x;
int main() {
Foo::x = 123;
}
또한 http://www.acm.org/crossroads/xrds2-4/ovp.html#SECTION00040000000000000000 (영문)에서 C++의 정적 데이터를 재미있게 읽는 방법을 참조하십시오. –
에서 짧고, 예.
오랫동안 정적 멤버는 어디에서나 호출 할 수 있으며 클래스 이름을 네임 스페이스로 취급하기 만하면됩니다.
class Something
{
static int a;
};
// Somewhere in the code
cout << Something::a;
클래스 이름을 구문의 컨텍스트에서만 다른 방법으로는 네임 스페이스로 취급 할 수 없습니다. –
그것을 :) 사용하지 마십시오, 그것은을 위해 무엇을 네임 스페이스의 수업.
기술적으로 이것은 정의되지 않은 동작입니다. 어떤 이유로 든 널 포인터를 추론 할 수 없습니다. 널 포인터로 수행 할 수있는 유일한 작업은 a) 다른 포인터를 지정하고 b) 다른 포인터와 비교하는 것입니다. – KeithB
이/pFoo 포인터는 멤버에 액세스 할 때 역 참조됩니다. 정적 함수는 멤버에 액세스하지 않으며 멤버가 없습니다. 비 가상 메소드조차도 예외없이 null 포인터를 통해 호출 될 수 있습니다. 회원에게 액세스 할 때만 충돌합니다. 이상한 버그를 찾기 위해서는 누구든지이 사실을 알고 받아 들여야합니다. –