声明类变量后调用构造函数

时间:2019-07-11 12:29:58

标签: c++ constructor

我有两个班级PointVector

我正在从包含某些点的文件中读取输入,并且必须从这些点构造一些矢量。

例如,我文件的前三行如下:

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()对象并将其分配给相应的矢量来解决此问题。但是我对使用构造函数很感兴趣。在变量已经声明之后可以使用构造函数吗?

2 个答案:

答案 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);
}

编译器将进行优化。