getter和setter方法的用途是什么

what is the use of getter and setter method?

本文关键字:是什么 方法 setter getter      更新时间:2023-10-16

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

有人能告诉我getter/setter方法的用途吗?

在一次采访中,有人让我写一节简单的课。。。因此,我编写了如下所示的课程:

class X
{
    int i;
public:
    void set(int ii){ i = ii;}
    int get(){ return i;}
};

现在,问题是这样的:

Q1.为什么将变量"i"声明为private而不是public?

我的回答是:Bcoz,数据总是敏感的,通过宣布它是私有的,你可以防止它暴露在外部世界。

为了反驳我的推理,面试官说。。。"那么,为什么要提供一个公共的getter/setter方法呢?既然这些成员函数是公共的,所以变量"i"暴露在外界,任何人都可以改变"i"的值。"

此外,面试官建议我把上一节课重写如下:

class X
{
public:
    int i;
};

好处是:您可以更快地修改"i"的值。。。因为这次不需要函数调用。

不过,面试官的推理似乎很好。。。。因为通过使私有变量"i"和公共get/set方法,您无法保护您的数据。那么,我们为什么要写get()/set()方法呢?

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

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

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

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

我回答的是:

我同意我们仍然可以将变量"I"声明为public,并且可以删除get/set方法的使用。但这只能在你100%确定的情况下完成关于这一点,您将来不会更改类变量。

因为。。。如果我们删除get/set方法,那么我们将直接在100个文件中使用"i"。[like:object.i=10;]如果你的变量"i"变成了"j",那么你的文件就会开始失败。

因此,为了克服这个问题。。。。我们使用get/set方法。唯一需要进行更改的地方是在类X中,使"i"-->"j"。

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