C ++中的抽象类和构造函数

时间:2014-05-02 18:47:54

标签: c++ constructor abstract-class

我读了这个问题“C++ Abstract Class: constructor yes or no?”以及属于它的答案。

但是根据答案,我理解我们需要构造函数来初始化它的数据成员,但是我可以使用其成员函数,如我的派生类中的setter函数来初始化数据成员,所以为什么定义构造函数很重要吗?

2 个答案:

答案 0 :(得分:2)

默认构造函数定义和成员初始化使类自包含关于正确的设置条件(有效状态)。
对于类客户端(包括继承类),使用setter方法来操作类实例是可选的。

您可以考虑添加更多构造函数签名,客户端可以使用这些签名通过一次调用来初始化类成员,并且不要求这些签名者应用额外的setter调用。

这取决于特定的用例,最终更方便和语义正确。

答案 1 :(得分:1)

有两个原因:

  1. 确保对象始终处于有效状态。
  2. 您需要一个复制构造函数来确保正确复制数据(例如,没有动态分配资源的盲目副本)。
  3. 可能更多。