【问题标题】:Creating a class for only one object [closed]仅为一个对象创建一个类[关闭]
【发布时间】:2016-10-14 16:57:57
【问题描述】:

我认为这是一个非常简单的问题,但我似乎无法通过谷歌搜索找到一个好的答案。

在使用 C++ 编程时(作为初学者),我经常喜欢使用类来组织我的代码。但是,当我只需要一个对象来创建该类时,是否有理由不创建该类?当我了解面向对象编程时,我明白当您需要 许多 个对象时,类是描述某些 对象 的一种方式。

我想我的问题很简单:如果一个类只需要一个对象,那么创建一个类是否常见?

【问题讨论】:

  • 这取决于您在代码中如何使用它。如果在课堂上隐藏工作更容易,那就去吧。否则,不要过度考虑 OOP 并将其发挥到极致。
  • 我认为他指的是只使用一次类...不允许只使用一个实例。
  • 我的意思是创建一个类,我只创建一个我在整个代码/项目中使用的对象。就我而言,即使我只会创建一个对象,我也不需要“物理上”将其限制为仅一个对象。但从下面的答案看来,我要问的是单例模式!
  • 不,单例模式是为了限制代码使其无法创建额外的对象。如果您只需要该类的一个对象,只需创建一个。如果您没有要解决的问题(例如意外创建多个副本),则无需增加额外的复杂性。
  • 啊,这其实是我最需要的答案。单例模式只是一种使得不可能拥有多个对象的方法。如果没有理由相信我创建了多个对象,那么很好,创建一个类并创建一个对象,这是很常见的事情!

标签: c++ class oop


【解决方案1】:

即使你只需要实例化一个类的对象一次,创建一个包含自己的变量和函数的类头文件而不是在 main.xml 中定义它们是有益的。创建一个类强化了封装的概念,这使得代码更易于维护(您可以重用类和/或更新功能)。此外,创建一个类将保持格式一致,并使代码在您重新阅读或邀请他人查看您的程序时易于阅读。

【讨论】:

  • 是的,基本上我想这样做的原因是,我觉得我的代码随着它变得越来越大而更容易理解,即使我是唯一一个在处理它的人。我只是有一种感觉,我在某种意义上“过度使用”了课程。但是谢谢,至少这澄清了我正在做的事情不是一个坏主意:)
  • 不客气!我也是初学者!
【解决方案2】:

是的……出于各种原因。

  1. 将来可能会发生变化,您需要多个实例,您将不得不减少重写。
  2. 您仍然将所有需要的变量封装在类中。
  3. 查看单例模式https://en.wikipedia.org/wiki/Singleton_pattern 的优点。线程安全更容易实现
  4. 你不需要实现双重检查锁定模式https://en.wikipedia.org/wiki/Double-checked_locking

C++ 提供了一种初始化单例的好方法

Singleton& instance()
{
     static Singleton s;
     return s;
}

不需要if,它立即是线程安全的

【讨论】:

    【解决方案3】:

    如果一个类只需要一个对象,创建一个类是否常见?

    是的。有一个模式。它叫做The Singleton Pattern

    关于这个主题也有很多关于 SO 的问题和答案。见https://stackoverflow.com/search?q=%5Bc%2B%2B%5D+is%3Aq+singleton

    【讨论】:

    • 谢谢。是的,我遇到了单例模式并理解这是一种将类限制为只能拥有一个对象的方式。我认为这是针对非常具体的案例,但我会仔细阅读。
    • 单例模式非常有争议,所以在使用它之前请阅读大量内容。只使用普通类的一个实例我没有看到任何问题..(封装...)
    【解决方案4】:

    是的,还有一种模式:单例模式。 https://en.wikipedia.org/wiki/Singleton_pattern

    使用此模式,您只能创建一个对象,而不能创建更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多