Я пытаюсь создать свой первый класс в 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
показаны как такие странные цифры? Есть ли способ заставить его выглядеть как нормальные нули?
Вы не устанавливаете переменные-члены в любое значение в вашем конструкторе:
Point(double x, double y, double z)
{
}
Тебе нужно
Point(double x, double y, double z) : x(x), y(y), z(z) {}
Это инициализирует ваши данные членов x
, y
, а также z
с использованием список инициализации конструктора.
Вы также должны удалить свой конструктор копирования. Синтезированный компилятором подойдет.
Оно пустое
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
}
Этот конструктор копирования копирует неинициализированные значения в другой объект.
Ваш конструктор глючит. Члены не инициализированы. Измените это на:
Point(double x_, double y_, double z_)
: x(x_), y(y_), z(z_)
{
}