【问题标题】:when we have setter for setting value then why do we use parameterized constructor当我们有设置值的设置器时,为什么我们使用参数化构造函数
【发布时间】:2016-05-19 16:15:13
【问题描述】:

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

【问题讨论】:

标签: c++ constructor setter getter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您在创建时不构造可用的对象,例如通过使用参数化构造函数,如果您/用户忘记使用您的设置器来实际为对象的参数提供任何实际值,您可能会遇到问题。

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

    如果我误解了您的问题,而您的意思只是为什么要这样做:

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

    而不是这个:

    MyClass(int a, int b) {
        setPrivIntA(a);
        setPrivIntB(b);
    }
    

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

    【讨论】:

    • 您可以通过一个示例扩展此答案,说明如果 MyClass 必须添加一个新成员会发生什么情况,这样旧代码仍然可以无错误地编译。
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多