谁能告诉我getter / setter方法的用途是什么?
class X
{
int i;
public:
void set(int ii){ i = ii;}
int get(){ return i;}
};
现在,问题是这样的:
Q1。为什么你将变量'i'声明为私有而不是公开?
我的回答: Bcoz,数据始终是敏感的,通过将其声明为私有,您可以防止它暴露给外部世界。
为了反驳我的推理,面试官说......“那么,你为什么提供一个公共的getter / setter方法?因为,这些成员函数是公开的, 所以仍然变量'i'暴露给外界,任何人都可以改变'i'的价值。“
此外, 面试官建议我重写我以前的课程如下:
class X
{
public:
int i;
};
好处是:你可以更快地修改'i'的值...因为这次不需要函数调用。
面试官的推理似乎很好......因为通过制作私有变量'i'和公共get / set方法,你无法保护你的数据。那么,为什么要编写get()/ set()方法?
答案 0 :(得分:3)
目的是,如果需要,您可以随时使用更复杂的逻辑更改setter和getter方法(例如,有效性检查)。如果您不使用getter / setter,则必须编写它们,然后在更改字段的任何位置更改代码,这可能会导致很难找到的错误。
答案 1 :(得分:3)
有访问器和mutator隐藏用于访问该变量的逻辑。如果逻辑发生了变化,你只需要在成员函数中更改它,而不是在访问该公共变量的任何地方。这有助于保持内部状态数据不受外界影响,因此您不必担心这些操作的实现细节。
答案 2 :(得分:1)
我们使用getter / setter和私有数据变量来确保Data Encapsulation
答案 3 :(得分:1)
好吧,您可以将这些访问者私有。客户端不需要知道类型的数据表示 - 这是抽象的一个组成部分。
答案 4 :(得分:0)
我同意我们仍然可以声明变量' i'作为公共,我们可以删除get / set方法的用法。但这只能在您100%确定时才能完成 关于你以后不会改变你的类变量。
因为...如果我们删除了get / set方法,那么我们将使用' i'直接在100个文件中。[like:object.i = 10;] 如果有任何机会,你的变量' i'更改为' j',然后您的文件将开始失败。
所以,要克服这个问题....我们使用get / set方法。而你需要做出改变的唯一地方就是在X级,制作'我' - > ' J'
这是我能想到的get / set方法的唯一用法。