当我们设置值设置时,为什么我们使用参数化构造函数

时间:2016-05-19 16:15:14

标签: c++ constructor setter getter

当我们设置值的setter函数时,为什么我们需要参数构造函数?有必要使用吗?如果我们想使用构造函数而不是setter是不是很好,之后我们可以使用getter函数访问我们的数据?

2 个答案:

答案 0 :(得分:1)

构造函数的工作是以这样一种方式构造对象,使其处于可用状态。如果这需要ctor的参数,它应该得到它们,以便在构造函数完成时可以完全形成对象。 构造一个处于部分可用状态的对象,然后依赖于用户在允许使用该对象之前记住调用特定的setter是非常容易出错的。 Setter适用于在创建对象后更改内容,但是为了构造可用对象,调用它们不应该是必需的。

答案 1 :(得分:1)

如果在创建时没有构造可用对象,例如使用参数化构造函数,如果您/用户忘记使用setter实际为对象的参数赋予任何实际值,则可能会遇到问题。

可能您只是返回一个虚假/零值,这会产生意外结果,或者如果您尝试访问一些您无权访问的内存,可能会导致程序崩溃。

如果我误解了你的问题,你只是想说明为什么这样做:

django-activity-stream v0.6.2

而不是:

MyClass(int a, int b) {
    myPrivateIntA = a;
    myPrivateIntB = b;
}

如果您在设置值之前需要进行某种验证,我想您可以使用后者。