我对c ++很陌生,想知道是否可以这样做:
Rectangle rect(Point(0, 0), 10, 10); // doesn't work
这个想法是Rectangle获取Point对象以及width和height参数。构造函数看起来像这样:
Rectangle::Rectangle(Point & point, double width, double height) {
this->point = point;
this->width = width;
this->height = height;
};
Point::Point(double x, double y) {
this->x = x;
this->y = y;
};
通过这样做我可以获得预期的效果:
Point point(0, 0);
Rectangle rect(point, 10, 10); // this works
但我认为如果我可以直接在新矩形的参数中实例化我的观点会很好。如果可以,请告诉我!谢谢!
答案 0 :(得分:2)
“常规”引用不能绑定到临时的,只有常量引用(const T&
)和r值引用(T&&
)
在您的第一个代码段中,Point(0, 0)
是临时的,因此无法绑定到Point&
,但在您的第二个代码段中,Point point(0, 0);
不是临时的,因此它可以正常工作
在这种情况下,由于您不尝试修改临时,因此将其绑定到常量引用:
Rectangle::Rectangle(const Point & point, double width, double height)
答案 1 :(得分:0)
这取决于Rectangle
的定义方式。
我假设它看起来像这样:
class Rectangle {
Point point;
double width, height;
/*...*/
};
在这种情况下,定义像这样的构造函数将起作用:
Rectangle::Rectangle(Point const& p, double w, double h) {
point = p;
width = w;
height = h;
}
这将允许它采取临时(如你所愿)或采取左值(这是你的第二个例子)。
如果Rectangle
旨在将引用存储到某个点,那几乎肯定是设计错误,您应该更改它。
答案 2 :(得分:0)
您可以在参数列表中进行实例化,但不会在构造函数外部使用Point。该点将是构造函数的本地。
之后您可以以rect.point的身份访问该点。
编辑:
由于您尝试使用引用指向,因此无效。