getter和setter方法有什么用?

时间:2012-08-23 19:23:52

标签: c++ getter-setter

  

可能重复:
  Why use getters and setters?

  

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

5 个答案:

答案 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方法的唯一用法。