2012-06-03 5 views
5

한다고 가정 우리는정적 멤버 객체는

class Egg 
{ 
static Egg e; 
int i; 
Egg(int ii):i(ii) {} 
Egg(const Egg &); //Prevents copy-constructor to be called 
public: 
static Egg* instance() {return &e} 
}; 

Egg Egg::e(47); 

이 코드는 우리가 어떤 개체를 만들 수 없습니다 보장 등의 클래스를 가지고 있지만 정적 객체를 사용할 수 있습니다. 그러나 클래스에서 같은 클래스의 정적 객체를 어떻게 선언 할 수 있습니까?

또한 e가 정적 객체이기 때문에 정적 객체가 정적 객체 만 호출 할 수 있으므로 정적 객체 e에 대해 생성자를 호출 할 수 있고 생성자도 private이 될 수 있습니다.

답변

6

하지만 클래스에서 같은 클래스의 정적 객체를 어떻게 선언 할 수 있습니까?

static 구성원 변수는 클래스의 각 개체 안에 저장되지 않습니다. 따라서 클래스를 정의한 후 클래스 또는 네임 스페이스 수준 객체로 static 멤버 변수를 선언하면 액세스 (Class::varvar)와 액세스가 다르며 protectedprivate 멤버에 액세스 할 수 있습니다. e 이후 더

또한 한 가지 정적 객체이며, 정적 객체를 사용하면 static 기능과 static 객체를 혼합하는 정적 멤버 함수

내 생각을 호출 할 수 있습니다. static 함수 내에서 static 함수 만 호출 할 수 있습니다 (객체에서 호출하지 않는 한). 생성자가 너무 생성자가 static 개체를 호출 할 수있는 모든 다른 개체에 대한 정적 객체 e

처럼 여기라고되어 수 있도록하는 방법을

.

는 또한 생성자는 개인

액세스 제어는 C에서 클래스 수준 ++에 선택되어 있습니다. 따라서 static 개체가 클래스 안에 있으므로 private 멤버에 액세스 할 수 있습니다. 개인 회원에 대한 액세스 클래스 내부에서이기 때문에 다른 언어와는 달리

다음은 C++에 대한 법률이다 -도 (이 경우 other) 다른 개체의 경우 :

class Test { 
private: 
     int i; 
public: 
     Test(const Test &other) 
     : i(other.i) 
     {} 
}; 
+0

정적 객체가 클래스 내에 있지만 민간 생성자를 액세스 할 수있는 방법을. 생성자가 private 인 경우 일반적으로 객체를 만들 수 없습니다. – Luv

+1

클래스 내부에 정의되어 있으므로 생성자에 액세스 할 수 있습니다. 수업 내 모든 것이 사적인 멤버에 액세스 할 수 있습니다. –

2

하지만 클래스에서 동일한 클래스의 정적 객체를 어떻게 선언 할 수 있습니까?

는 일반적으로 당신은 앞으로 참조가 필요 싶지만, 계란 전자는 정적이기 때문에, 그것은 실제로 클래스 정의의 외부 을 정의합니다. e가 정적이지 않은 경우 오류가 발생합니다 (예 : "필드 Egg e에 불완전한 유형이 있습니다").

또한 e가 정적 객체이기 때문에 정적 객체는 정적 멤버 함수 만 호출 할 수 있으므로 정적 객체 e에 대해 생성자를 호출 할 수있는 방법은 무엇입니까?

이것은 사실이 아닙니다. 클래스 내의 정적 멤버 함수은 정적 멤버 데이터에만 액세스 할 수 있습니다. 정적 Egg e은 Egg의 인스턴스이므로 정규 Egg이 모든 구성원과 데이터에 액세스 할 수 있습니다.

또한 생성자는 private입니다.

모든 개인 회원은 수업 내에서 사용할 수 있습니다. 정적 Egg e은 Egg의 멤버로 선언되므로 개인 생성자를 사용할 수 있습니다. 정적 인 이래로 e의 정의는 밖에 있고 클래스이지만 여전히 클래스 멤버입니다.

그리고 당신이 여기 세미콜론 탈락하기 때문에 마지막 코드는 컴파일되지 않습니다 :

static Egg* instance() {return &e;}