2014-10-27 57 views
2

假设我有一堂课。我希望它有一个构造函数,它可以接受某些参数,所以我创建一个。即使我不需要它,我仍然需要一个没有参数的构造函数(默认构造函数)吗?换句话说,即使我不需要它,是否包含Class()作为成员函数?你必须有一个默认的构造函数吗?

+0

不,你不*有*。是什么让你问这个? – Cornstalks 2014-10-27 17:17:07

+0

我认为这取决于你需要什么 – 2014-10-27 17:17:11

+0

如果它从未被调用过,那就没有必要。但如果你未能在另一个类的初始化列表中初始化你的类,它可能会被间接引用(将弹出编译器错误) – Creris 2014-10-27 17:17:15

回答

-4

是的,你需要有一个默认的构造函数。该程序不会另外编译。

+0

这个答案是错误的,三个用户投票删除它,但你仍然想重新发布它? – Flexo 2014-11-02 03:19:44

+0

@Flexo是的,我愿意。 – dfg 2014-11-02 22:32:57

7

不需要。创建一个能够满足你需要的课程,而不是无缘无故依附于货物崇拜的课程。如果有疑问,橡皮鸭会上课。

+0

“橡皮鸭”? – 2014-10-27 17:20:33

+2

@MikeSeymour:[是](http://en.wikipedia.org/wiki/Rubber_duck_debugging)。 – 2014-10-27 17:21:06

+0

或泰迪轴承! – codenheim 2014-10-27 17:21:35

6

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

你只需要它,如果你想能够默认初始化类。通常你不需要这样 - 你只想让对象存在,如果它们是用你写的构造函数正确初始化的 - 这就是为什么声明你自己的构造函数会删除隐式的默认构造函数。

+0

如果您想对类进行初始化值,您还需要它。 – 2014-10-27 17:18:29

+1

@KerrekSB:确实;尽管一旦你声明了一个构造函数,这也是一样的。 – 2014-10-27 17:19:48

1

不,除非你使用某些期望你有默认构造函数的第三方库。

+0

然后你需要仔细考虑你对这些库的使用,因为将你的对象构造成无效状态违反了RAII。有时。 – 2014-10-27 17:25:43

+0

它确实如此,但在某些情况下你确实无法保证。 – SMA 2014-10-27 17:26:28

+0

@LightnessRacesinOrbit我喜欢在这些情况下定义一个“空状态”,通常通过'bool m_null;'。 – leemes 2014-10-27 17:36:34

1

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

相关问题