визуализация — c ++: почему 0 отображается как 1.29571e + 261

Я пытаюсь создать свой первый класс в 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

Решение

Вы не устанавливаете переменные-члены в любое значение в вашем конструкторе:

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

}

Тебе нужно

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

Это инициализирует ваши данные членов x, y, а также z с использованием список инициализации конструктора.

Вы также должны удалить свой конструктор копирования. Синтезированный компилятором подойдет.

5

Другие решения

Оно пустое

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
}

Этот конструктор копирования копирует неинициализированные значения в другой объект.

2

Ваш конструктор глючит. Члены не инициализированы. Измените это на:

Point(double x_, double y_, double z_)
: x(x_), y(y_), z(z_)
{
}
0
По вопросам рекламы [email protected]