getter和setter方法的用途是什么
what is the use of getter and setter method?
可能重复:
为什么要使用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方法的唯一用途。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- C++:使用方法调用析构函数的顺序是什么?
- 将此布尔值传递给此函数的最有效方法是什么?