【问题标题】:In c++, declaring class variable as private is always good?在 C++ 中,将类变量声明为私有总是好的?
【发布时间】:2015-07-18 06:31:52
【问题描述】:

在Java中,通常建议将类变量声明为private。 我想知道 C++ 也像 Java 一样。但如果是的话,问题是(我认为),大多数班级应该有get()set() 功能,我认为这很麻烦。但如果这是良好的编程习惯,我会遵循它。请分享您的意见。

【问题讨论】:

  • 这完全取决于你想要什么。如果你想要一个 C 风格的结构风格,可以访问原始数据,那么这不是你想要的。如果你想在 set 或 get 上做一些其他的操作,setters/getters 是要走的路。
  • 视情况而定。例如,std::stack<T> 有一个 protected 数据成员。
  • 在嵌入式系统中呢?请给我建议。
  • 将类成员声明为私有不是好的 java 设计,它是 好的面向对象 设计。您希望尽可能多地封装类的功能。您编写的访问私有成员的函数越多,您的类的封装就越少。这并不是对创建函数的可怕警告,它只是意味着不要“自动”创建访问器和修改器函数。
  • 嵌入的两侧。一是小而快,克服了平台的限制。另一个是永远不会崩溃。慢很烂,但如果自动驾驶仪坠毁,飞机可能会跟随。这通常被认为非常非常糟糕。对我来说,封装是关于自卫的。每个对象都使用编写良好的 getter 和 setter 来保护它的状态,用于需要共享的数据,而不共享不需要的数据。从妄想症开始,锁定一切。执行会告诉你某些东西是否太慢,而分析器会告诉你这是否是你装甲访问器的方式。在此之前,请不要私信。

标签: c++ object-oriented-analysis


【解决方案1】:

你所说的东西叫做封装。现在,使用该术语,您应该能够找到正确的定义,但您也应该能够找到使用它的原因。一旦您了解了封装的原因,您将能够权衡其解决您的任务的成本和收益,从而决定是否使用它。

顺便说一句,这些原则完全独立于您使用的编程语言,尽管它们在不同语言中可能采用不同的形式。

【讨论】:

    【解决方案2】:

    如果您的 class 只是像 C struct 这样的数据成员的集合,那么最好坚持使用 public 成员。

    但是,C++ class 比 C struct 强大得多。特别是,它有一个向用户公开的public 接口和一个private 部分,它有助于实现公共接口,但对用户隐藏。这样就可以在不影响类的可用性的情况下修改私有接口。

    Getter 和 Setter 不一定是公共接口的一部分。

    【讨论】:

      【解决方案3】:

      你所说的,你可能知道,叫做封装。它有几个优点。

      假设您有一个类可以每隔 X 秒从传感器获取温度。你肯定会有一个包含温度的变量。如果你的变量是公开的,那么每个人都可以写

      std::cout << "temperature is : " << temperatureReader.temperature << " °C";
      

      但是,如果传感器发生变化并返回华氏温度,您就有麻烦了。如果你为这个类创建了一个吸气剂,你唯一的改变就是吸气剂,把你的华氏温度换算成摄氏度。但是使用公共变量必须重构很多代码。那么 Getter 很重要。

      假设现在您的班级中有一个传感器连接器。如果是公开的,每个人都可以写:

      temperatureReader.sensor = nullptr; 
      

      当然它是邪恶的,但我可以做到,记住你的类必须易于高效使用,并且难以糟糕使用。但是,如果您创建了一个 Setter,您将能够控制变量中的内容。

      OOP 还有一件重要的事情,即 SOLID 原则:

      公共变量也由您的子类继承,您可能不是这样。

      【讨论】:

        猜你喜欢
        • 2013-09-06
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        相关资源
        最近更新 更多