2017-02-17 4 views
1

나는 출판물과 도서관 두 종류의 클래스와 출판물을 가지고있다. 장르, 미디어 및 target_age를 조작하는 방법 (캡슐화) 그것은 다른 클래스 안에있는 클래스가 아닙니다. 장르는 미디어 및 연령뿐만 아니라 (소설, 논픽션, 자조, 공연) 형식으로 많습니다. 나는 나의 연구를 해왔다. 나는 그것을위한 적절한 구문을 위해 serchin이다.적절한 캡슐화 구문은 무엇입니까?

class Publication {  
    private: 
    string title; 
    string authore; 
    string copyright; 
    Genre genre; 
    Media media; 
    Age target_age; 
    string isbn; 
    bool checked_out; 
    string patron_name; 
    string patron_phone; 

    public: 
    void check_out(string patron_name, string patron_phone){} 
    void check_in(){} 
    bool is_checked_out(){} 
    string to_string(){} 
}; 

답변

1

캡슐화하는 가장 좋은 방법은 모든 것을 비공개로 유지하는 것입니다. 외부에서 읽을 수있는 내용에 대한 상수 getter를 만들고 생성자의 모든 내용을 초기화합니다. 결국 저자/제목/등이 있습니다. 진짜 책의 예를 위해 바뀌면 안된다. 다음 스 니펫을 살펴보십시오.

class Publication {  
    private: 
    string _title; 
    string _author; 
    Genre _genre; 

    public: 
    void check_out(string patron_name, string patron_phone); 
    void check_in(); 
    bool is_checked_out() const; 

    string to_string() const; 
    string get_title() const { return _title; } 
    string get_author() const { return _author; } 
    const Genre& get_genre() const { return _genre; } 


    Publication(string author, string title, Genre genre) : _author(auth), _title(title), _genre(genre) 
    { } 
}; 
+0

동일한 작업을 수행했습니다. 개인용 변수에 setter 및 getter를 사용하고 있습니다. 내 문제는 그들이 출판 클래스에 대한 개인 섹션의 클래스 객체 인 경우 장르, 미디어 및 연령을 조작하는 방법입니까? –

+0

캡슐화의 요점은 당신이 그들을 조작하고 싶지 않다는 것입니다 ... 그렇지 않으면 그들을 공개하고 그것을 캡슐화라고하지 마십시오. 당신의 예에서 (내가 올바르게 이해한다면) 기존 출판물의 장르를 바꿀만한 이유가 없습니다 ... 왜 그렇게해야합니까? 참고로, 클래스'Publication'은 여전히'Genre'의 인스턴스를 조작 할 수 있습니다 만, 외부로부터의 아무도 캡슐화의 전체 지점이 될 수는 없습니다 ... – Kupto

+0

@ Kupto Ok, 저는 당신의 요점을 이해했습니다. 이제 픽션, 논픽션, 자조 및 공연으로 장르를 어떻게 구현해야합니까? 나 혼란스러워하는 또 다른 일. 프로그램에서 그것을 사용하는 것은 무엇입니까? –