我有两个班级Point
和Vector
。
我正在从包含某些点的文件中读取输入,并且必须从这些点构造一些矢量。
例如,我文件的前三行如下:
0.0 0.0 50.0 // point a
0.0 0.0 0.0 // point b
0.0 1.0 0.0 // point c
我正在另一个名为Stages
的类中处理输入解析,该类当前如下所示:
class Stages{
int fileLineNumber;
Point eyePoint,lookPoint,upPoint;
Vector eye,look,up;
void parseInput(){
// parse the 3 points here
}
// ....
现在,我想将向量构造为eye = point b - point a
,依此类推。我在Vector
类中编写了相应的构造函数:
Vector(Point p1,Point p2){
Point diff = p2 - p1;
x = diff.x;
y = diff.y;
z = diff.z;
}
我的问题是,因为我已经在Stages
类中声明了3个向量,所以在解析这些点之后如何调用Vector
构造函数?我可以通过在Vector
类内编写一个设置矢量坐标的函数或在Vector
函数内创建一个临时parseInput()
对象并将其分配给相应的矢量来解决此问题。但是我对使用构造函数很感兴趣。在变量已经声明之后可以使用构造函数吗?
答案 0 :(得分:1)
在创建对象后立即创建成员。这样,Vector
的构造函数已经在三个成员向量的每一个上被调用。
假设向量是可分配的,您可以做的是构造一个临时向量,并将其分配给成员:
eye = {a, b};
答案 1 :(得分:0)
您可以声明副本分配运算符:
Vector& operator=(const Vector&) = default;
编译器生成的默认值就足够了。 (C ++ 11) 在C ++ 11之前,只需编写一个简单的复制分配操作符即可复制每个字段。 然后在您的客户代码中:
void parseInput()
{
// suppose pa and pb are Pointer objects, v is a member object
v = Vector(pa, pb);
}
编译器将进行优化。