#include <iostream>
#include<cmath>
using namespace std;
class Point{
private:
    double x,y;
public:
    Point(double x, double y){
        this->x=x;
        this->y=y;
    }
    void setVar(double x, double y){
        this->x=x;
        this->y=y;
    }
    double getX(){return x;}
    double getY(){return y;}
    void add(Point p){
        x+=p.x;
        y+=p.y;
    }
    // double calculateDistFromOrigin(){
    //     return sqrt(x*x+y*y);
    // }
};


class Point3D : private Point{
private:
    double z;
public:
    Point3D(double x, double y, double z): Point(x, y){
        this->z=z;
    }
    // void setVar(double x, double y, double z){
    //     Point::setVar(x,y); ////
    //     this->z=z;
    // }
    void setZ(double z){
        this->z=z;
    }
    
    void setVarDelegate(double x, double y){
        setVar(x, y);
    }
    
    double getXDel(){return getX();}
    double getYDel(){return getY();}
    double getZ(){return z;}
    
    void add(Point3D p){
        Point::add(Point(p.getX(), p.getY()));
        // Point::add(Point(p.x, p.x));
        z+=p.z;
    }
    
    // double calculateDistFromOrigin(){
    //     return sqrt(getX()*getX()+getY()*getY()+getZ()*getZ());
    // }
};


int main(){
    Point p1(2.5, 3.2);
    p1.add(Point(5.0, 5.0));
    
    cout<<"(x, y, z)="<<"("<<p1.getX()<<", "<<p1.getY()<<")"<<endl;
    
    Point3D p(1.2, 2.5, 3);
    p.add(Point3D(5.0, 5.0, 5.0));
    
    //cout<<"(x,y,z)="<<"("<<p.getX()<<","<<p.getY()<<","<<p.getZ()<<")"<<endl;
    cout<<"(x, y, z)="<<"("<<p.getXDel()<<", "<<p.getYDel()<<", "<<p.getZ()<<")"<<endl;
    
    return 0;
}
