#include <iostream>
#include <vector>
#include <cstdio>


using namespace std;


class Point
{
    double x, y, z;

    public:
    // constructor from 3 values
    Point(double x, double y, double z);

    // method display
    void display();
	
	double getX() { return x ; };
	double getY() { return y ; };
	double getZ() { return z ; };
};

// constructor from 3 values
Point::Point(double x, double y, double z)
: x(x), y(y), z(z)
{}

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



class Line
{
    Point pnt1, pnt2;

    public:
    // constructor from 2 points
    Line(Point& pnt1, Point& pnt2);

    // method display line
    void display();
};

// constructor from 2 points
Line::Line(Point& _pnt1, Point& _pnt2)
: pnt1(_pnt1), pnt2(_pnt2)
{}

// method display line
void Line::display()
{
    cout << "Line(Point(" << pnt1.getX() << ", " << pnt1.getY() << ", " << pnt1.getZ() << ")" << ", Point(" << pnt2.getX() << ", " << pnt2.getY() << ", " << pnt2.getZ() << ")\n";
}

int main()
{
    // initialise object Point
    cout << endl << "Point initialisation:" << endl;

    Point pnt = Point(0.0, 0.0, 0.0);
    cout << "pnt = "; pnt.display();

    Point pnt2 = Point(1.0, 1.0, 1.0);
    cout << "pnt2 = "; pnt2.display();

    // initialising object Line
    cout << "Line initialisation:" << endl;

    Line line = Line(pnt, pnt2);
    line.display();

    return 0;
}