A mi me gusta más la tercera opción por varias razones:
* Existe encapsulamiento.
* Permite obtener un código más legible, sobretodo si se sobrecargan varios operadores ( suma, resta, ... )
* Su mantenimiento luego es más sencillo y se limitan la cantidad de "gazapos" por parte del que usa el objeto.
* Es muy sencillo acoplarle una batería te test para asegurar el correcto funcionamiento.
Se que tiene varias desventajas, pero desde mi punto de vista y mi experiencia ( trabajo en un cad orientado al sector naval ) me dicen que la tercera opción es la que más beneficios tiene.
Algunas desventajas:
* Resevas de memoria al crear copias del objeto, lo que reduce sensiblemente el rendimiento.
* Hay que currárselo todo al principio.
Vaya no lo había visto así. ¿Pero es necesario el encapsulamiento en un objeto así?
La segunda manera tambien usa un objeto, en C++ las estructuras son a todos los efectos clases con sus miembros y clases bases publicos por defecto. Los constructores no existen en C.
Muy cierto, quizás debería haber sido más preciso en la terminología ^^
Y como dato final, yo prefiero hacer vectores, no coordenadas. Aunque prácticamente son lo mismo, tienen más usos cuerdos. No es cuerdo sumar coordenadas, en cambio sí lo es sumar vectores. No es cuerdo un producto mixto de coordenadas, pero sí uno de vectores. En fin.
Las coordenadas se pueden interpretar como un vector desde la posición (0,0) a la posición (x,y). Ergo si tiene un uso cuerdo.
Quizás para no liar se puede cambiar el nombre de Cord -> Vector.