多个不同的构造函数作为函数参数

时间:2014-11-15 14:54:25

标签: c++ function parameters constructor

我有这样的事情:

class Object{  
    A a;
    B b;
    C c;
}

某个名为Object的类,它有三个属性。在我的案例中,A,B和C是结构。 Object的构造函数看起来像这样:

Object::Object(A a, B b, C c)
{
    this->a = a;
    this->b = b;
    this->c = c;
}

我试图达到的目的是,用户可以调用Object的构造函数并设置其中的任何值,而其余的值应该保留一些默认值。

例如,那些函数调用应该以某种方式工作:

int main() {
    Object(A(),B(),C());  
    Object(A());            // B and C stay on some default value
    Object(A(),C());        // B stays on some default value
}

我已经尝试过使用c ++默认参数。这没有用,因为如果没有为A()提供值,就不可能为B()提供用户定义的值。

无论如何,上面的代码只是一个简化的例子。我的代码应该是可扩展的。将来可能会有超过三个值的对象,我不想为每个可能的调用案例创建不同的构造函数。

你对此有什么想法吗?有可能这样做吗?

1 个答案:

答案 0 :(得分:1)

尝试使用构建器模式,在wikipedia上进行检查,然后在SOanother reference上进行检查:

对于C ++,它将类似于:

class A;
class B;
class C;

class Obj {
    static Obj Obj::Build() { return Obj(); }

    Obj & SetA(...) { ... }
    Obj & SetB(...) { ... }
    Obj & SetC(...) { ... }

    //...
};

main() {
    Obj o = Obj::Build()
        .SetA(<params to A>)
        .SetC(<params to c>);
    //Note: B was not named.
}