클래스로 사용 되더라도 "내"코드 만 클래스를 사용할 수 있도록하려면 어떻게해야합니까? 내 클래스 중 하나에 대한 기본 클래스의 사용을 표시하려면개인 기본 클래스로 사용되는 클래스의 공개 사용 금지
(이 기본 클래스로 사용되지 만약 내가 내 클래스 중 하나의 private
또는 protected
중첩 클래스를 만들 수있는 것은) 단순한 구현 세부입니다 나는 개인 기본 클래스 사용할 수 있습니다 : 나는 Base
클래스를 사용하는 것으로, 내 Derived
클래스의 클라이언트에
class Base
{
...
}
class Derived: private Base
{
public:
Derived(...): Base{...} {... };
...
}
것은 명백한되지 않습니다 :
#include "Derived.h"
void client() {
Derived d{...};
Base *b = static_cast< Base * >(&d);// error
...
}
하지만 상상 그,214,클래스가 너무 특수하거나 혼란 스럽거나 사용하기 까다 롭다. 내 코드 클라이언트가 기본 클래스로 사용하거나 해당 클래스의 객체를 만들 수 없기를 바란다.
#include "Derived.h"
class Client: Base// error wanted here
{
public:
Client(...): Base{...} {...};
...
}
void client()
{
Derived d{...};// OK
Base b{...};// error wanted here
Client c{...};// error wanted here
}
내가 어떻게 할 수 있습니다
이 같은 클라이언트 코드가 실패, 그래서 나는 내 코드의 일부, 그것은 어떤 의미에서, "개인"되고 싶어?실제로 동일한 "패키지"(모듈)의 다른 클래스에만 액세스 할 수 있지만 "패키지"외부 코드에서는 사용할 수없는 Java's package-private classes과 같은 것을 얻을 수 있는지 묻습니다.
확실히 여기 있습니다. 멈추는 사람들은 어리석은 행동을하지 않습니다. 더 나은 것은 그들이 어리 석다는 것과 책임감있는 성인이되도록 남겨 두는 것입니다. – StoryTeller
이렇게하면 아무 것도 얻을 수 없습니다. 클라이언트는'detail :: Base b = {...};'라고 쓸 수 있습니다. – Raedwald
@ Raedwald : 더 좋은 해결책은 없습니다. C++ 개발자는 관습에 따라'detail ::'라고 쓰면 모든 내기가 꺼져 있음을 알아야합니다. 'libstdC++'에서 이상한 구현 실체를 사용하는 것을 막을 수있는 방법은 없습니다. –