#include <iostream>
class Coord
{
private:
double x, y, z;
public:
Coord();
Coord(double, double, double);
class setters {
friend class Coord;
private:
explicit setters(Coord &);
public:
setters(setters const &) = delete;
setters & operator=(setters const &) = delete;
void x(double) const;
void y(double) const;
void z(double) const;
private:
Coord & coord;
};
friend class setters;
class getters {
friend class Coord;
private:
explicit getters(Coord const &);
public:
getters(getters const &) = delete;
getters & operator=(getters const &) = delete;
double x() const;
double y() const;
double z() const;
private:
Coord const & coord;
};
friend class getters;
setters const set;
getters const get;
};
Coord::Coord() : x(0), y(0), z(0), set(*this), get(*this) { }
Coord::Coord(double px, double py, double pz) : x(px), y(py), z(pz), set(*this), get(*this) { }
Coord::setters::setters(Coord & c) : coord(c) { }
void Coord::setters::x(double px) const {
coord.x = px;
}
void Coord::setters::y(double py) const {
coord.y = py;
}
void Coord::setters::z(double pz) const {
coord.z = pz;
}
Coord::getters::getters(Coord const & c) : coord(c) { }
double Coord::getters::x() const {
return coord.x;
}
double Coord::getters::y() const {
return coord.y;
}
double Coord::getters::z() const {
return coord.z;
}
int main() {
Coord a(1,2,3);
std::cout << a.get.x() << ' ' << a.get.y() << ' ' << a.get.z() << std::endl;
a.set.x(5);
a.set.y(6);
a.set.z(7);
std::cout << a.get.x() << ' ' << a.get.y() << ' ' << a.get.z() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQ29vcmQKewpwcml2YXRlOgoJZG91YmxlIHgsIHksIHo7CgkKcHVibGljOgoJQ29vcmQoKTsKCUNvb3JkKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwoJCgljbGFzcyBzZXR0ZXJzIHsKCQlmcmllbmQgY2xhc3MgQ29vcmQ7CgkJCglwcml2YXRlOgoJCWV4cGxpY2l0IHNldHRlcnMoQ29vcmQgJik7CgkJCglwdWJsaWM6CgkJc2V0dGVycyhzZXR0ZXJzIGNvbnN0ICYpID0gZGVsZXRlOwoJCXNldHRlcnMgJiBvcGVyYXRvcj0oc2V0dGVycyBjb25zdCAmKSA9IGRlbGV0ZTsKCQkKCQl2b2lkIHgoZG91YmxlKSBjb25zdDsKCQl2b2lkIHkoZG91YmxlKSBjb25zdDsKCQl2b2lkIHooZG91YmxlKSBjb25zdDsKCQkKCXByaXZhdGU6CgkJQ29vcmQgJiBjb29yZDsKCX07CglmcmllbmQgY2xhc3Mgc2V0dGVyczsKCQoJY2xhc3MgZ2V0dGVycyB7CgkJZnJpZW5kIGNsYXNzIENvb3JkOwoJCQoJcHJpdmF0ZToKCQlleHBsaWNpdCBnZXR0ZXJzKENvb3JkIGNvbnN0ICYpOwoJCQoJcHVibGljOgoJCWdldHRlcnMoZ2V0dGVycyBjb25zdCAmKSA9IGRlbGV0ZTsKCQlnZXR0ZXJzICYgb3BlcmF0b3I9KGdldHRlcnMgY29uc3QgJikgPSBkZWxldGU7CgkJCgkJZG91YmxlIHgoKSBjb25zdDsKCQlkb3VibGUgeSgpIGNvbnN0OwoJCWRvdWJsZSB6KCkgY29uc3Q7CgkJCglwcml2YXRlOgoJCUNvb3JkIGNvbnN0ICYgY29vcmQ7Cgl9OwoJZnJpZW5kIGNsYXNzIGdldHRlcnM7CgkKCXNldHRlcnMgY29uc3Qgc2V0OwoJZ2V0dGVycyBjb25zdCBnZXQ7Cn07CgpDb29yZDo6Q29vcmQoKSA6IHgoMCksIHkoMCksIHooMCksIHNldCgqdGhpcyksIGdldCgqdGhpcykgeyB9CgpDb29yZDo6Q29vcmQoZG91YmxlIHB4LCBkb3VibGUgcHksIGRvdWJsZSBweikgOiB4KHB4KSwgeShweSksIHoocHopLCBzZXQoKnRoaXMpLCBnZXQoKnRoaXMpIHsgfQoKQ29vcmQ6OnNldHRlcnM6OnNldHRlcnMoQ29vcmQgJiBjKSA6IGNvb3JkKGMpIHsgfQoKdm9pZCBDb29yZDo6c2V0dGVyczo6eChkb3VibGUgcHgpIGNvbnN0IHsKCWNvb3JkLnggPSBweDsKfQoKdm9pZCBDb29yZDo6c2V0dGVyczo6eShkb3VibGUgcHkpIGNvbnN0IHsKCWNvb3JkLnkgPSBweTsKfQoKdm9pZCBDb29yZDo6c2V0dGVyczo6eihkb3VibGUgcHopIGNvbnN0IHsKCWNvb3JkLnogPSBwejsKfQoKQ29vcmQ6OmdldHRlcnM6OmdldHRlcnMoQ29vcmQgY29uc3QgJiBjKSA6IGNvb3JkKGMpIHsgfQoKZG91YmxlIENvb3JkOjpnZXR0ZXJzOjp4KCkgY29uc3QgewoJcmV0dXJuIGNvb3JkLng7Cn0KCmRvdWJsZSBDb29yZDo6Z2V0dGVyczo6eSgpIGNvbnN0IHsKCXJldHVybiBjb29yZC55Owp9Cgpkb3VibGUgQ29vcmQ6OmdldHRlcnM6OnooKSBjb25zdCB7CglyZXR1cm4gY29vcmQuejsKfQoKaW50IG1haW4oKSB7CglDb29yZCBhKDEsMiwzKTsKCQoJc3RkOjpjb3V0IDw8IGEuZ2V0LngoKSA8PCAnICcgPDwgYS5nZXQueSgpIDw8ICcgJyA8PCBhLmdldC56KCkgPDwgc3RkOjplbmRsOwoJCglhLnNldC54KDUpOwoJYS5zZXQueSg2KTsKCWEuc2V0LnooNyk7CgkKCXN0ZDo6Y291dCA8PCBhLmdldC54KCkgPDwgJyAnIDw8IGEuZ2V0LnkoKSA8PCAnICcgPDwgYS5nZXQueigpIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=