#include <iostream>
class Vector3d
{
private:
double m_x, m_y, m_z;
friend class Point3d;
public:
Vector3d(double x = 0.0, double y = 0.0, double z = 0.0)
: m_x(x), m_y(y), m_z(z)
{
}
void print()
{
std::cout << "Vector(" << m_x << " , " << m_y << " , " << m_z << ")\n";
}
};
class Point3d
{
private:
double m_x, m_y, m_z;
public:
Point3d(double x = 0.0, double y = 0.0, double z = 0.0)
: m_x(x), m_y(y), m_z(z)
{
}
void print()
{
std::cout << "Point(" << m_x << " , " << m_y << " , " << m_z << ")\n";
}
void moveByVector(Vector3d &v);
};
void Point3d::moveByVector(Vector3d& v)
{
m_x += v.m_x;
m_y += v.m_y;
m_z += v.m_z;
}
int main()
{
Point3d p(1.0, 2.0, 3.0);
Vector3d v(2.0, 2.0, -3.0);
p.print();
p.moveByVector(v);
p.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgVmVjdG9yM2QKewpwcml2YXRlOgoJZG91YmxlIG1feCwgbV95LCBtX3o7CglmcmllbmQgY2xhc3MgUG9pbnQzZDsKcHVibGljOgoJVmVjdG9yM2QoZG91YmxlIHggPSAwLjAsIGRvdWJsZSB5ID0gMC4wLCBkb3VibGUgeiA9IDAuMCkKCQk6IG1feCh4KSwgbV95KHkpLCBtX3ooeikKCXsKCgl9CgoJdm9pZCBwcmludCgpCgl7CgkJc3RkOjpjb3V0IDw8ICJWZWN0b3IoIiA8PCBtX3ggPDwgIiAsICIgPDwgbV95IDw8ICIgLCAiIDw8IG1feiA8PCAiKVxuIjsKCX0KfTsKCgpjbGFzcyBQb2ludDNkCnsKcHJpdmF0ZToKCWRvdWJsZSBtX3gsIG1feSwgbV96OwoKcHVibGljOgoJUG9pbnQzZChkb3VibGUgeCA9IDAuMCwgZG91YmxlIHkgPSAwLjAsIGRvdWJsZSB6ID0gMC4wKQoJCTogbV94KHgpLCBtX3koeSksIG1feih6KQoJewoKCX0KCgl2b2lkIHByaW50KCkKCXsKCQlzdGQ6OmNvdXQgPDwgIlBvaW50KCIgPDwgbV94IDw8ICIgLCAiIDw8IG1feSA8PCAiICwgIiA8PCBtX3ogPDwgIilcbiI7Cgl9CgoJdm9pZCBtb3ZlQnlWZWN0b3IoVmVjdG9yM2QgJnYpOwp9OwoKdm9pZCBQb2ludDNkOjptb3ZlQnlWZWN0b3IoVmVjdG9yM2QmIHYpCnsKCW1feCArPSB2Lm1feDsKCW1feSArPSB2Lm1feTsKCW1feiArPSB2Lm1fejsKfQoKaW50IG1haW4oKSAKewoJUG9pbnQzZCBwKDEuMCwgMi4wLCAzLjApOwoJVmVjdG9yM2QgdigyLjAsIDIuMCwgLTMuMCk7CgoJcC5wcmludCgpOwoJcC5tb3ZlQnlWZWN0b3Iodik7CglwLnByaW50KCk7CgkKCXJldHVybiAwOwp9