#include <iostream>
#include <cmath>
class Point
{
private:
int x;
int y;
public:
Point() = default;
Point(int x, int y)
{
this->x = x;
this->y = y;
std::cout << "Constuctor in Point Class Called" << std::endl;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
void setPoint(int nX, int nY)
{
x = nX;
y = nY;
}
void add(Point p)
{
x += p.x;
y += p.y;
}
int calculateDistance();
~Point()
{
std::cout << "Destructor in Point Class" << std ::endl;
}
};
class Point3D : private Point
{
private:
int z;
public:
Point3D() = default;
Point3D(int x, int y, int z) : Point(x, y)
{
this->z = z;
std::cout << "Constuctor in Point3D Class Called" << std::endl;
}
int getZ()
{
return z;
}
void setZ(int nZ)
{
z = nZ;
}
void setDelegate(int x, int y)
{
setPoint(x, y);
}
int deletegateX()
{
return getX();
}
int deletegateY()
{
return getY();
}
void add(Point3D p)
{
Point::add({p.getX(), p.getY()});
z += p.z;
}
int calculateDistance()
{
return sqrt((deletegateX() * deletegateX()) + (deletegateY() * deletegateY()) + (z*z));
}
void display()
{
std::cout << getX() << getY() << z << std::endl;
}
~Point3D()
{
std::cout << "Destructor in Point3D Class" << std::endl;
}
};
int main()
{
Point3D d;
d.setDelegate(2, 3);
d.setZ(6);
d.display();
std::cout << "Delegated X: " << d.deletegateX() << std::endl;
std::cout << "Delegated Y: " << d.deletegateY() << std::endl;
std::cout << "Z: " << d.getZ() << std::endl;
std::cout << "Distance: " << d.calculateDistance() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CgpjbGFzcyBQb2ludAp7CnByaXZhdGU6CiAgICBpbnQgeDsKICAgIGludCB5OwoKcHVibGljOgogICAgUG9pbnQoKSA9IGRlZmF1bHQ7CiAgICBQb2ludChpbnQgeCwgaW50IHkpCiAgICB7CiAgICAgICAgdGhpcy0+eCA9IHg7CiAgICAgICAgdGhpcy0+eSA9IHk7CgogICAgICAgIHN0ZDo6Y291dCA8PCAiQ29uc3R1Y3RvciBpbiBQb2ludCBDbGFzcyBDYWxsZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICBpbnQgZ2V0WCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHg7CiAgICB9CiAgICBpbnQgZ2V0WSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHk7CiAgICB9CgogICAgdm9pZCBzZXRQb2ludChpbnQgblgsIGludCBuWSkKICAgIHsKICAgICAgICB4ID0gblg7CiAgICAgICAgeSA9IG5ZOwogICAgfQoKICAgIHZvaWQgYWRkKFBvaW50IHApCiAgICB7CiAgICAgICAgeCArPSBwLng7CiAgICAgICAgeSArPSBwLnk7CiAgICB9CgogICAgaW50IGNhbGN1bGF0ZURpc3RhbmNlKCk7CgogICAgflBvaW50KCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkRlc3RydWN0b3IgaW4gUG9pbnQgQ2xhc3MiIDw8IHN0ZCA6OmVuZGw7CiAgICB9Cn07CgpjbGFzcyBQb2ludDNEIDogcHJpdmF0ZSBQb2ludAp7CnByaXZhdGU6CiAgICBpbnQgejsKCnB1YmxpYzoKICAgIFBvaW50M0QoKSA9IGRlZmF1bHQ7CgogICAgUG9pbnQzRChpbnQgeCwgaW50IHksIGludCB6KSA6IFBvaW50KHgsIHkpCiAgICB7CiAgICAgICAgdGhpcy0+eiA9IHo7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJDb25zdHVjdG9yIGluIFBvaW50M0QgQ2xhc3MgQ2FsbGVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgaW50IGdldFooKQogICAgewogICAgICAgIHJldHVybiB6OwogICAgfQoKICAgIHZvaWQgc2V0WihpbnQgblopCiAgICB7CiAgICAgICAgeiA9IG5aOwogICAgfQoKICAgIHZvaWQgc2V0RGVsZWdhdGUoaW50IHgsIGludCB5KQogICAgewogICAgICAgIHNldFBvaW50KHgsIHkpOwogICAgfQoKICAgIGludCBkZWxldGVnYXRlWCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGdldFgoKTsKICAgIH0KCiAgICBpbnQgZGVsZXRlZ2F0ZVkoKQogICAgewogICAgICAgIHJldHVybiBnZXRZKCk7CiAgICB9CgogICAgdm9pZCBhZGQoUG9pbnQzRCBwKQogICAgewogICAgICAgIFBvaW50OjphZGQoe3AuZ2V0WCgpLCBwLmdldFkoKX0pOwogICAgICAgIHogKz0gcC56OwogICAgfQoKICAgIGludCBjYWxjdWxhdGVEaXN0YW5jZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNxcnQoKGRlbGV0ZWdhdGVYKCkgKiBkZWxldGVnYXRlWCgpKSArIChkZWxldGVnYXRlWSgpICogZGVsZXRlZ2F0ZVkoKSkgKyAoeip6KSk7CiAgICB9CgogICAgdm9pZCBkaXNwbGF5KCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgZ2V0WCgpIDw8IGdldFkoKSA8PCB6IDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB+UG9pbnQzRCgpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJEZXN0cnVjdG9yIGluIFBvaW50M0QgQ2xhc3MiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmludCBtYWluKCkKewoKICAgIFBvaW50M0QgZDsKICAgIGQuc2V0RGVsZWdhdGUoMiwgMyk7CiAgICBkLnNldFooNik7CiAgICBkLmRpc3BsYXkoKTsKCiAgICBzdGQ6OmNvdXQgPDwgIkRlbGVnYXRlZCBYOiAiIDw8IGQuZGVsZXRlZ2F0ZVgoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIkRlbGVnYXRlZCBZOiAiIDw8IGQuZGVsZXRlZ2F0ZVkoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIlo6ICIgPDwgZC5nZXRaKCkgPDwgc3RkOjplbmRsOwoKCiAgICBzdGQ6OmNvdXQgPDwgIkRpc3RhbmNlOiAiIDw8IGQuY2FsY3VsYXRlRGlzdGFuY2UoKSA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gMDsKfQ==