2010-12-02 2 views
0

나는 C 배경에서 오는 나의 첫 OOP 프로젝트의 완성에 가깝다. 파일을 여는 기본 클래스에서 사용하는 ifstream 개체와 관련된 디자인 문제가 궁금합니다. 그 후 동일한 클래스를 사용하여 파생 클래스에서 추가 작업을 수행하려고합니다. 보호 된 클래스로만이 멤버를 정의 했으므로 protected 클래스에서 파생 클래스에 접근 할 수 있었고 protected는 캡슐화를 중단했습니다. 좋은 습관을 얻고 싶습니다. 일부 getter 함수를 정의하여 스트림 객체에 대한 참조를 반환해야합니까? ifstream 객체는 복제 가능 아니기 때문에, 그 문제가, 내가 볼 제일 먼저 ...ifstream 멤버를 보호

보다도, 일 Umut 수 있습니다

그것이 당신의 디자인에 필수 인 경우 캡슐화를 보존하기위한

답변

1

protected 이상적입니다 그 파생 클래스는 기본 클래스와 동일한 I/O 기능을가집니다.

캡슐화는 모든 것이 private이어야 함을 의미하지는 않으며 클래스의 설계된 목적을 달성하기 위해 클래스의 각 데이터 또는 코드 멤버가 최소한의 클래스 사용자 만 볼 수 있음을 의미합니다. 즉, 코드 작성을 쉽게하기 때문에 모든 것을 만들지 마십시오.

기본 및 파생 클래스의 I/O 기능을 계층 구조 외부의 코드에 표시하려면 public 게터 만 필요합니다. 참조를 반환한다고해서 사본을 의미하는 것은 아닙니다.

+0

Getter는 캡슐화를 훨씬 더 깨고 있습니다 (공개 된 경우) – Drakosha

+0

Thx, Steve, "기본 및 파생 클래스의 I/O 기능을 공개하려면 공개 getter가 필요합니다. 계층 구조 외부의 코드 "가 될 수 있습니다. –

+0

@Drakosha - 그것은 순전히 가치 판단이며, 클래스의 목적에 대해 더 많이 알지 못하면 이것이 나쁜 것임을 확신 할 수 없습니다. –