【发布时间】:2016-05-19 16:15:13
【问题描述】:
当我们有设置值的 setter 函数时,为什么我们需要参数构造函数?有必要使用吗?如果我们想使用构造函数而不是 setter 是不是很好,然后我们可以使用 getter 函数访问我们的数据?
【问题讨论】:
标签: c++ constructor setter getter
当我们有设置值的 setter 函数时,为什么我们需要参数构造函数?有必要使用吗?如果我们想使用构造函数而不是 setter 是不是很好,然后我们可以使用 getter 函数访问我们的数据?
【问题讨论】:
标签: c++ constructor setter getter
构造函数的工作是以这样一种方式构造对象,使其处于可用状态。如果这需要 ctor 的参数,它应该获取它们,以便在构造函数完成时可以完全形成对象。 构造一个处于部分可用状态的对象,然后依靠用户记住在允许他们使用该对象之前调用特定的 setter,这很容易出错。 Setter 可以在对象创建后进行更改,但调用它们不应该是构造可用对象的必要条件。
【讨论】:
如果您在创建时不构造可用的对象,例如通过使用参数化构造函数,如果您/用户忘记使用您的设置器来实际为对象的参数提供任何实际值,您可能会遇到问题。
您可能只是返回了一个虚假/零值,这会产生意想不到的结果,或者如果您尝试访问一些您无权访问的内存,它可能会导致程序崩溃。
如果我误解了您的问题,而您的意思只是为什么要这样做:
MyClass(int a, int b) {
myPrivateIntA = a;
myPrivateIntB = b;
}
而不是这个:
MyClass(int a, int b) {
setPrivIntA(a);
setPrivIntB(b);
}
如果您需要在设置值之前进行某种验证,我想您可以使用后者。
【讨论】: