存取器和突变体方法
Accessor and Mutator Methods
可能的重复:
为什么使用getter和setter?
在我看来,编写访问器和赋值器方法是一大麻烦,尤其是在处理非常简单的属性时。我为什么要麻烦使用它们?
答案主要取决于您编写代码的目的以及如果单独工作,您对自己的信任程度:
- 当您与人员合作时,或者当您想强制执行编译时检查以确保您没有在类外使用它们时,保持变量私有是有用的
- 如果你有副作用,setter很有用
- 如果您有副作用或希望保持变量只读,getter非常有用
- 有或没有getter和setter是你的选择,如果其他人要使用你的类,那么封装可能是一件好事,因为信息隐藏原则
- 如果你是唯一一个只做你想做的事情的人,如果你真的觉得有必要的话,你会及时添加它们
- 既然我们谈论的是C++,不要忘记
friend
指令,它允许细粒度封装,而不需要设置setter和getter(即使它鼓励耦合,所以这里有两种不同的思想流派)
我不能谈论C++语法负担,但在一般面向对象的术语中,你应该提供getter和setter,因为其他类不知道你如何存储内部状态,包括哪些属性是直接存储的,哪些是基于其他状态计算的,哪些会进一步传递给其他对象。与更广泛的世界签订一份关于类将如何存储状态的合同公告,这将限制你未来可以进行的调整,通常会阻碍优化,并随着你解决的问题变得更加微妙而破坏你的代码。
- 它们使人们能够控制访问。你可以只读,读/写,甚至只写
- 它使人们能够在必要时更改底层实现。考虑计算多辆车的平均速度。您可以通过存储速度列表来实现这一点,然后在需要时计算平均值或保持一个运行总数和数字
- 所有对类的访问都是通过方法进行的。更容易发现错误
- 这不是一个很大的努力。可以使用脚本来创建它们
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 私下声明的对象变量的突变器/访问器方法
- 类 arrray [3][3] 中的访问器和突变器 c++ 方法
- 在C 中,有一种惯用方法来防止运行一系列动作的情况导致该集合被突变
- C++中各种向量突变方法的语法
- 存取器和突变体方法