-4

我正在尝试用 C++ 创建我的第一个类。我正在制作文件geometryitems.cpp并这样做:

using namespace std;

class Point
{
    double x, y, z;
public:
    // constructor
    Point(double x, double y, double z)
        {

        }

    // copy constructor
    Point(const Point& pnt)
        {
            x = pnt.x;
            y = pnt.y;
            z = pnt.z;
        }

    void display()
        {
            cout << "Point(" << x << ", " << y << ", " << z << ")";
        }
};

然后我从另一个文件中调用它,如下所示:

#include <iostream>
#include <cstdio>
#include "geometryitems.cpp"
using namespace std;

int main()
{
    // initialise object Point
    Point pnt = Point(0, 0, 0);
    cout << "Point initialisation:" << endl;
    pnt.display();

    double t = 0;
    cout << endl << t << endl;

    Point pnt2 = pnt;
    pnt2.display();

    // keep the terminal open
    getchar();

    return 0;
}

这是输出:

t显示为正常的 0,但其他零是一些其他数字。我会理解它们是否只是非常非常小的数字,但也有非常非常大的数字......

为什么图中的零Point显示为如此奇怪的数字?有没有办法让它看起来像正常的零?

4

3 回答 3

5

您没有将成员变量设置为构造函数中的任何值:

Point(double x, double y, double z)
{

}

你需要

Point(double x, double y, double z) : x(x), y(y), z(z) {}

这将初始化您的数据成员xyz使用构造函数初始化列表

您还应该删除您的复制构造函数。编译器合成的就可以了。

于 2013-10-31T08:49:27.203 回答
2

它是空的

Point(double x, double y, double z)
{

}

所以,Point pnt = Point(0, 0, 0);不初始化任何东西。使用成员初始化列表。你也可以在这里阅读更多关于它的信息。

Point(double x, double y, double z) : x(x), y(y), z(z)
{                                  //^^^^^^^^^^^^^^^^^^
                                   // Initializer list
}

该复制构造函数正在将未初始化的值复制到另一个对象。

于 2013-10-31T08:49:04.753 回答
0

你的构造函数有问题。成员未初始化。将其更改为:

Point(double x_, double y_, double z_)
: x(x_), y(y_), z(z_)
{
}
于 2013-10-31T08:50:54.143 回答