2013-12-09 4 views
2

특정 기능에 대한 클래스가 여러 개 있습니다. 다른 하나는 "도우미"클래스이므로 클래스 중 하나만 사용자 코드에 의해 인스턴스화되어야합니다. 그러나 이러한 도우미 클래스는 사용자 코드가 사용할 수있는 유용한 정보를 노출합니다.클래스 간의 개인 데이터 및 메서드 공유

그래서 기본 클래스에서만 액세스 할 수 있도록 도우미 클래스의 생성자를 사용할 수 있습니다.

마찬가지로 '사용자 코드'가 아니라 적절한 클래스에서만 접근 할 수있는 방법과 데이터를 갖는 것이 유용 할 것입니다. 하나의 파일로 기능에 대한

장소의 모든 클래스와 해당 파일에 로컬 변수를 생성하는 '정적'사용

솔루션 지금까지 생각했습니다. 메인 클래스와 모든 '도우미'클래스의 인스턴스가 하나만있을 것이므로이 방법이 효과적 일 수 있지만 "좋은"해결책은 아닙니다.

'도우미 클래스'친구에게 기본 클래스를 지정하십시오. 이것은 또한 작동하지만, 이상적인 클래스가 아닌 모든 개인 데이터에 대한 주 클래스 액세스를 제공합니다.

가상 기본 클래스에서 상속 : 가능한 최선의 해결책이라고 생각하십시오. '보호 된'을 통한 공유 데이터, 비공개 데이터는 비공개로 유지되며 공개 데이터가 노출됩니다. 아직이 이론에서 어떤 구멍도 뚫어지지 않았습니다. 이것이 72Mhz의 클럭 속도를 가진 임베디드 시스템이기 때문에 성능 측면을 고려해야합니다.

+1

저는 전문가는 아니지만 성능을 원하는 임베디드 시스템의 가상 기능을 고려하면 좋은 생각이 아닙니다. – Manu343726

답변

2

사용 구성.

상속 된 클래스는 기능 만 상속하고 상속되지 않아야합니다. 보호 된 멤버/함수는 상태 논리를 두 개의 단위로 나눌 수 있습니다. 나는 컴포지션 사용을 말하고 공용 기능을 통해 기능에 액세스합니다.

당신이 모르는 사용자에게는 수업이 결코 좋지 않을 것이라고 말하면, 나는 자신을 제한하지 말라는 말을 할 것입니다.

+0

그래서 기본적으로 기본 클래스의 개인 섹션에 도우미 클래스가 있고 공용 클래스를 통해 사용자를 대신하여 기본 클래스에 액세스 할 수 있도록 하시겠습니까? – squidge

+0

예, 실제로 "올바른"디자인입니다. 이 방법으로 캡슐화를 계속할 수 있으며 자신을 제한하지 않고 중복 커플 링을 사용할 필요가 없습니다. – concept3d

관련 문제