直接在其他类构造函数中使用类的构造函数

时间:2016-02-08 14:15:00

标签: c++ c++11 constructor

我有这个:

class point{
public:
    point()=default;
    point(int x,int y):x(x),y(y){}
    int x,y;
}

和此:

class quad{
public:   
    quad()=default;
    quad(point a,point b,point c, point c):a(a),b(b),c(c),d(d){};

    point a,b,c,d;
}

总的来说,我可以这样做:

point a(0,0),b(1,1),c(2,2),d(3,3);
quad q(a,b,c,d);

或直接这:

quad q(point(0,0),point(1,1),point(2,2),point(3,3));

但当然不是这样:

quad q(0,0,1,1,2,2,3,3); // I know it's wrong

问题:

是否可以在不声明quad中使用8个整数的新构造函数来使用最后一个代码?这个问题的动机是emplace_back的工作方式。更清楚:

std::vector<point> points;
points.push_back(point(0,0)); // you have to pass object
points.emplace_back(0,0);  // you have just to send the arguments of the constructor

1 个答案:

答案 0 :(得分:7)

如果没有声明新的构造函数,这是不可能的。

一种选择是为每个点传递大括号初始值设定项:

quad q({0,0},{1,1},{2,2},{3,3});