【问题标题】:Accessor and Mutator Methods [duplicate]访问器和修改器方法[重复]
【发布时间】:2012-12-01 19:08:13
【问题描述】:

可能重复:
Why use getters and setters?

在我看来,编写访问器和修改器方法很麻烦,尤其是在处理非常简单的属性时。我为什么要费心使用它们?

【问题讨论】:

  • 谁说你应该打扰?你不应该。
  • 当您确实需要确保在获取或设置它们时发生某些事情(例如增加计数器或验证新值)时,它们会更有用。
  • 如果你的结构或类必须维护基于属性的不变量,那么访问器和修改器方法可以确保维护这些不变量。

标签: c++ attributes accessor mutators


【解决方案1】:

答案主要取决于你编写代码是为了什么,以及你对自己的信任程度:

  • 当您与人一起工作或想要强制执行编译时检查以确保您没有在类外使用它们时,将变量保持私有非常有用
  • 如果您有副作用,setter 很有用
  • 如果您有副作用或希望变量保持只读状态,getter 会很有用
  • 拥有或不拥有 getter 和 setter 是您的选择,如果其他人要使用您的类,那么封装可能是一件好事,因为 信息隐藏 原则
  • 如果您是唯一一个在您的项目中工作的人,只需做您想做的事,如果您真的觉得有必要,您将及时添加它们
  • 既然我们谈论的是 C++,请不要忘记 friend 指令,它允许细粒度封装而无需使用 setter 和 getter(即使它鼓励耦合,所以这里有两种不同的思想流派)李>

【讨论】:

    【解决方案2】:

    我不能谈论 C++ 语法负担,但在一般面向对象的术语中,您应该提供 getter 和 setter,因为其他类不知道您如何存储内部状态,包括直接存储哪些属性,这些属性是基于计算的其他状态,并进一步转移到其他对象。与更广泛的世界就类将如何存储状态进行合同公告将限制您将来可以进行的调整,随着您要解决的问题变得更加细微,通常会抑制优化并破坏您的代码。

    【讨论】:

      【解决方案3】:
      1. 它们使一个人能够控制访问。您可以只读、读/写甚至只写
      2. 它使人们能够在必要时更改底层实现。考虑计算许多车辆的平均速度。您可以通过存储速度列表来实现这一点,然后在需要时计算平均值保持运行总数和数量。
      3. 所有对类的访问都是通过方法。更容易发现错误。
      4. 这不是很多努力。可以使用脚本来创建它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 2012-06-02
        • 1970-01-01
        相关资源
        最近更新 更多