什么是正确的封装语法?
问题描述:
我有出版物和图书馆两个类和出版类。如何操作(作为封装)流派,媒体和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(){}
};
答
封装的最好方法是将所有内容都保密。为可能从外部读取的内容创建常量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)
{ }
};
我做了同样的事情。我使用setter和getters来获得私有变量。我的问题是如何操纵流派,媒体和年龄,如果他们是在发布课的私人部分的类对象? –
封装的一点是,你不希望它们被操纵......否则使它们公开,不要称之为封装。在你的例子中(如果我理解正确),你没有任何理由去改变现有出版物的流派......你为什么要这样做?注意,这个''Publication'类仍然可以操作'Genre'的实例,但是外部没有人可以...这就是封装的全部... – Kupto
@ Kupto好的,我理解你的观点。现在我应该如何以小说,非小说,自助和表演来实现流派。另一件令我困惑的事情。它在程序中的用途是什么? –