[디딤돌 C++] 74. 최종 실습 – 클래스 추가하기

학생) 클래스의 관계에 따라 적절하게 헤더파일 포함문을 작성하세요.

이제 클래스를 추가하고 클래스 사이의 관계에 따라 헤더 파일을 포함합시다. 여기에서는 헤더 파일에 포함문을 작성하는 것 까지만 할 거예요.

EH나라 클래스 다이어그램

클래스 다이어그램을 보면서 클래스를 추가하세요. 현재 EhNara, Place, Downtown, School, Village 클래스를 추가한 상태죠. 앞에서 작성한 확장 가능한 순차 배열인 SeqArray 템플릿 클래스를 추가하세요. 그리고 상속과 다형성 최종 실습에서 작성한 프로그램에서 Student, MStudent, SStudent, PStudent 클래스를 이용할게요. 소스 파일과 헤더 파일을 복사하여 프로젝트에 추가하세요.

이 외에 Man, IStudy, IRelax, IPlay를 추가하세요. 그리고 이를 기반으로 Student 클래스를 추가하세요. 그리고 Student 클래스를 기반으로 MStudent, SStudent, PStudent 클래스를 추가하세요. StuFactory 클래스와 IComeBack도 추가하세요. 그리고 IComeBack을 기반으로 파생 형식으로 EhNara를 변경하세요.

이제 포함문을 작성합니다. EhNara에서는 StuFactory에 명령을 내려야 하므로 StuFactory.h 를 포함하세요. 그리고 학생을 보관해야 하므로 Student.h 파일을 포함하세요.

Place 클래스에서는 IComeBack에 명령을 내릴 수 있게 IComeBack.h를 포함하세요. 그리고 Man을 보관해야 하므로 Man.h 도 포함하세요. StuFactory 또한 Student를 포함하세요. 그리고 IComeBack에서는 사람을 복귀할 수 있어야 하므로 Man.h를 포함하세요.

그리고 학교에서는 학사 학생과 IStudy, 주거지에서는 마법학생과 IRelax, 다운타운에서는 운동학생과 IPlay에게 명령을 내릴 수 있어야 하므로 이에 맞게 헤더 파일을 포함하세요.

EhNara, Place, StuFactory에서는 컬렉션이 필요하므로 SeqArray.h를 포함하세요.

제약 조건에 Student의 생성과 소멸은 StuFactory에서만 가능하게 구현해야 합니다. 이를 위해 Student의 생성자와 소멸자를 protected로 접근 지정을 한정하고 friend class로 StuFactory로 설정하세요. protected로 접근 지정하는 이유는 파생 형식이 만들어지는 과정에 기반 형식의 생성자를 호출하기 때문에 최소 접근 지정을 protected로 해 주어야 합니다. 그리고 다른 형식에서 접근할 수 없게 하기 위해 protected로 한 것입니다.

또한 friend는 상속의 대상이 아니므로 MStudent, PStudent, SStudent의 생성자와 소멸자의 가시성도 private으로 접근 지정하세요.

이처럼 설정하면 StuFactory에서도 개체 생성을 할 수 없어서 StuFactory를 friend class 로 설정한 것입니다. friend를 사용하면 자신의 은폐한 모든 멤버를 friend로 지정한 곳에서는 가시성이 생겨 정보 은닉의 장점이 부분적으로 사라집니다. 여러분께서 friend를 사용하 때는 전체의 신뢰성을 높이기 위해 가시성을 낮추고 반드시 필요한 곳에 부분적으로 가시성을 주기 위해 사용하세요.

 

현재까지 작성한 내용은 다음과 같습니다.

여러분께서는 컴파일 및 빌드 후에 테스트를 해 보세요.