4

可能重复:
为什么要使用 getter 和 setter?

谁能告诉我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() 方法呢?

4

5 回答 5

3

目的是,如果需要(例如有效性检查),您始终可以使用更复杂的逻辑更改 setter 和 getter 方法。如果您不使用 getter/setter,则必须编写它们,然后在更改字段的任何地方更改代码,这可能会导致很难找到的错误。

于 2012-08-23T19:28:53.317 回答
3

拥有访问器和修改器隐藏了用于访问该变量的逻辑。如果逻辑发生变化,您只需在成员函数中更改它,而不是在任何访问该公共变量的地方进行更改。这有助于保持内部状态数据对外界隐藏,因此您不必担心这些操作的实现细节。

于 2012-08-23T19:29:04.957 回答
1

我们使用 getter/setter 和私有数据变量来确保数据封装

于 2012-08-23T19:29:33.990 回答
1

好吧,您可以将这些访问器设为私有。客户端不需要知道类型的数据表示——这是抽象的一个组成部分。

于 2012-08-23T19:29:52.450 回答
0

我的回答是:

我同意我们仍然可以将变量“i”声明为 public,并且我们可以删除 get/set 方法的使用。但这只有在您 100% 确定将来不会更改您的类变量时才能完成。

因为...如果我们删除 get/set 方法,那么我们将直接在 100 个文件中使用 'i'。[比如:object.i = 10;] 如果有任何机会,您的变量 'i' 会更改为 ' j',那么您的文件将开始失败。

所以,为了克服这个问题......我们使用 get/set 方法。唯一需要更改的地方是在 X 类中,make 'i' --> 'j'。

这是我能想到的 get/set 方法的唯一用途。

于 2012-08-23T19:32:54.300 回答