Antes de adentrarnos en técnicas más complejas, es útil echar un vistazo a algunos métodos básicos de mantener el código simple y sencillo.
El más trivial es el Mensajero (Messenger), [136] que empaqueta información en un objeto que se envia, en lugar de ir enviando todas las piezas independientemente. Nótese que sin el Mensajero, el código para la función translate() sería mucho más confuso:
//: C10:MessengerDemo.cpp #include <iostream> #include <string> using namespace std; class Point { // A messenger public: int x, y, z; // Since it's just a carrier Point(int xi, int yi, int zi) : x(xi), y(yi), z(zi) {} Point(const Point& p) : x(p.x), y(p.y), z(p.z) {} Point& operator=(const Point& rhs) { x = rhs.x; y = rhs.y; z = rhs.z; return *this; } friend ostream& operator<<(ostream& os, const Point& p) { return os << "x=" << p.x << " y=" << p.y << " z=" << p.z; } }; class Vector { // Mathematical vector public: int magnitude, direction; Vector(int m, int d) : magnitude(m), direction(d) {} }; class Space { public: static Point translate(Point p, Vector v) { // Copy-constructor prevents modifying the original. // A dummy calculation: p.x += v.magnitude + v.direction; p.y += v.magnitude + v.direction; p.z += v.magnitude + v.direction; return p; } }; int main() { Point p1(1, 2, 3); Point p2 = Space::translate(p1, Vector(11, 47)); cout << "p1: " << p1 << " p2: " << p2 << endl; } ///:~
Listado 9.1. C10/MessengerDemo.cpp
El código ha sido simplificado para evitar distracciones.
Como el objetivo del Mensajero es simplemente llevar datos, dichos datos se hacen públicos para facilitar el acceso. Sin embargo, podría tener razones para hacer estos campos privados.