내 생각과 통신하지 않는 수있는 방법은 소켓 멤버에 액세스 없음이 있는지 확인하려면? 자바 배경에서 오는가? C++에서 "정적 클래스"는 네임 스페이스를 정의하는 또 다른 방법과 같습니다. 클래스 멤버에 대한 접근성을 제한하기 위해 사용해야하는 것은 아닙니다 (실제로 "실제"클래스 멤버가 아니기 때문에).
좀 더 정확하게 말하자면, 키워드를 사용해도 결과 코드에 전혀 영향을 미치지 않습니다. "정적 클래스"로 간주되는 것은 일반적으로 static
멤버 만있는 클래스입니다.
당신이
static
키워드를 사용하는 방식으로 인해 당신이 클래스를 정의 할 수있어 동시에 객체 단순한 사실에 작동
:
static class ClassOfStaticObject {
ClassOfStaticObject() {
// ...
}
} myObject;
이이 같은 것입니다 :
class ClassOfStaticObject {
ClassOfStaticObject() {
// ...
}
};
static ClassOfStaticObject myObject;
은 당신이하고 싶은 것을 달성하기 위해, 당신은 순수 가상 함수 회원함으로써 사용자의 기본 클래스는 추상적하고있다 할 일은 :
class Socket {
Socket(void);
Socket(PORT);
~Socket(void);
// ...
virtual int send(const char *data) = 0;
virtual int recv(const char *data) = 0;
}
,369을
이 클래스가 이러한 가상 메서드를 구현하지 않는 이상 더 이상이 클래스 또는 파생 클래스의 인스턴스를 만들 수 없습니다. 대안으로 모든 생성자를 private
또는 protected
으로 숨길 수 있습니다.
이미했던 것처럼 당신은 단지 아이들에서 액세스하고 싶은 당신이에서 (그러나 나는 그 멤버를 선언하는 대신 다음
public
을 사용하는 것이 좋습니다 것, 즉
private
또는
protected
을 사용하지 않을 수 있습니다, 기본 클래스 '회원의 가시성을 제한하려면 바깥 쪽)은
protected
입니다.
class Socket {
protected:
Socket(void);
Socket(PORT);
~Socket(void);
// ...
virtual int send(const char *data) = 0;
virtual int recv(const char *data) = 0;
void something_protected();
public:
void something_debug(void);
}
class ServerSocket : public Socket {
// ...
}
이렇게하면 클래스 ServerSocket
의 객체에 something_debug()
를 호출 할 수 있습니다,하지만 당신은 외부에서 something_protected()
를 호출 할 수 없습니다 없으며 클래스 Socket
의 객체를 생성 할 수 있습니다.
쉽게이 질문에 직접 답하는 코드를 테스트 해 볼 수 있습니다. – EdChum