具有不同参数的多个构造函数

时间:2011-03-08 15:46:28

标签: c++

我在网上看到了这个,但是不相信可变数量的参数或使用桥接模式解决方案因此我在这里问这个问题。提前谢谢。

class B
{
public:
B(args_1);
B(args_2);
// and many constructors with different arg lists
};

class D : public B
{
public:
D(args_1) : B(args_1) {}
D(args_2) : B(args_2) {}
// and many constructors with different signatures similarly implemented
// some additional stuff specific to D
};

假设B的构造函数的arg列表很长并且可能是 经常在将来修改,在这种情况下,D的构造者有 相应地重新编码。通过复制粘贴复制更新 肯定会在这里工作。你能提出一个更好的方法吗? 更新可以在一个地方完成,无需复制和粘贴重复吗?

3 个答案:

答案 0 :(得分:2)

当然,使用构图而不是继承:

class D{
public:
   D(auto_ptr<B> _obj) : mB(_obj){}
   //member functions which delegate to the calls of "B"
   //member functions specific to "D"
private:
   scoped_ptr<B> mB;
};

答案 1 :(得分:1)

让编译器在需要时进行生成:

template<typename T1> D(T1 t) : B(t1) { };
template<typename T1, typename T2> D(T1 t, T2 t2) : B(t1, t2) { };

答案 2 :(得分:0)

创建另一个封装参数的类A,然后将其传递给D。

class A
{
   int foo;
};

class A1: public A
{
   float bar;
};


class B
{
    B(const A& args);
};

class D: public B
{
    D(const A& args) : B(args)
    {
       // do more stuff
    }
};