2017-02-17 121 views
1

我有出版物和圖書館兩個類和出版類。如何操作(作爲封裝)流派,媒體和target_age,如果我想讓它們成爲單獨的類。這不是另一個班級的班級。 這個流派有更多的類型(小說,非小說,自助,表演)以及媒體和時代。我已經完成了我的研究,我正在學習它的正確語法。什麼是正確的封裝語法?

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和getters來獲得私有變量。我的問題是如何操縱流派,媒體和年齡,如果他們是在發佈課的私人部分的類對象? –

+0

封裝的一點是,你不希望它們被操縱......否則使它們公開,不要稱之爲封裝。在你的例子中(如果我理解正確),你沒有任何理由去改變現有出版物的流派......你爲什麼要這樣做?注意,這個''Publication'類仍然可以操作'Genre'的實例,但是外部沒有人可以...這就是封裝的全部... – Kupto

+0

@ Kupto好的,我理解你的觀點。現在我應該如何以小說,非小說,自助和表演來實現流派。另一件令我困惑的事情。它在程序中的用途是什麼? –