【问题标题】:Do you have to have a default constructor?你必须有一个默认的构造函数吗?
【发布时间】:2014-10-27 17:15:38
【问题描述】:

假设我有一堂课。我希望它有一个带有某些参数的构造函数,所以我做了一个。即使我不需要它,我是否仍然需要一个没有参数的构造函数(默认构造函数)?换句话说,我是否Class() 包含为成员函数,即使我不需要它?

【问题讨论】:

  • 不,你没有。是什么让你这么问?
  • 我认为这取决于您的需要
  • 如果它从未被调用,则不需要它。但是如果你未能在另一个类的初始化列表中初始化你的类,它可能会被间接引用(会弹出编译器错误)

标签: c++ class oop


【解决方案1】:

没有。做一门满足你需要的课程,而不是无缘无故地坚持货物崇拜的课程。如有疑问,请避开课程。

【讨论】:

    【解决方案2】:

    不,如果你不需要它,那么你就不需要它。

    仅当您希望能够默认初始化该类时才需要它。通常你不希望这样 - 你只希望对象在使用你编写的构造函数正确初始化的情况下存在 - 这就是为什么声明你自己的构造函数会删除隐式默认构造函数。

    【讨论】:

    • 如果你想对类进行值初始化,你也需要它。
    • @KerrekSB:确实;虽然一旦你声明了一个构造函数,这就是同样的事情。
    【解决方案3】:

    不是真的,除非您使用某些第三方库,这些库希望您拥有默认构造函数。

    【讨论】:

    • 然后你需要仔细考虑你对这些库的使用,因为将你的对象构造成无效状态违反了 RAII。有时。
    • 确实如此,但在某些情况下你不能真正保证。
    • @LightnessRacesinOrbit 我喜欢在这些情况下定义一个“空状态”,通常通过bool m_null;
    • @LightnessRacesinOrbit 知道 ;) 但有时您必须处理除了默认 ctor 之外的库,例如在 Qt 容器中。但是,您的每种自定义类型都倾向于实现“可选性”,每种类型都是独立的,我猜这是您不喜欢的。
    • @LightnessRacesinOrbit *expect... ;)
    【解决方案4】:

    构造函数决定如何实例化您的类。所以,由你来设计构造函数。有时,您希望该类的用户仅通过排除该类的默认构造函数来指定数据成员的值(而不是具有某些默认值)来创建对象。

    【讨论】:

      【解决方案5】:

      是的,您需要有一个默认构造函数。否则程序将无法编译。

      【讨论】:

      • 这个答案太错误了,三个用户投票删除,但你还想重新发布它?
      猜你喜欢
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多