构建具有两个成员的类

时间:2012-11-02 08:49:21

标签: c++ constructor c++11

假设我们有以下内容:

(1)班级C,其中有两名成员X1 x1Y1 y1 (2)C没有默认构造函数,但确实有构造函数C(Z) (3)类X1没有默认构造函数,但构造函数X1(X2) (4)类Y1没有默认构造函数,但构造函数Y1(Y2) (5)函数f(Z),返回std::pair<X2, Y2>

让我们说f(z) -> std::pair<X2, Y2>{x2,y2}

如何在构建后编写成员CX1 x1 == X1(x2)等课程Y1 y1 == Y1(y2)

1 个答案:

答案 0 :(得分:4)

在C ++ 11中,您可以添加C的委托构造函数:

class C {
  X1 x1; Y1 y1;
public:
  C(Z z): C(f(Z)) {}
private:
  C(std::pair<X2, Y2> p): x1(p.first), x2(p.second) {}
};

如果你不能使用委托构造函数,唯一的方法是将成员移动到辅助类B并编写继承自C的{​​{1}}并添加构造函数B

Z