Estoy aprendiendo C++ y haciendo un pequeño juego he tenido que pasar un objeto como parámetro por referencia. He pensado algo como esto:
void function(OBJECT* obj) {
std::cout << obj->x;
}
Y luego:
OBJECT obj(2);
function(&obj); //2
El parámetro es un puntero para luego pasar el parámetro por referencia. Eso he pensado. Pero luego vi en internet una cosa parecida, algo como esto:
function(OBJECT &obj) {
std::cout << obj.x;
}
Y lógicamente ahora se llama a la funcion con 'obj', no con '&obj'. Entonces mi pregunta es: ¿cual es la diferencia?
Por ejemplo entre esto:
class Carretera {
public:
int limite_der, limite_izq;
Road(int _limite_der, int _limite_izq) : limite_der(_limite_der), limite_izq(_limite_izq) {}
};
class Coche {
int x;
public:
Coche(int _x) : x(_x) { };
void mover(Carretera* c);
};
void Coche::mover(Carrtera* c) {
while (this->x >= c->limite_der) {
this->x++;
}
}
int main() {
Carretera carr(0, 20);
Coche coche(carr.limite_der);
coche.mover(&carr);
return 0;
}
y esto:
class Carretera {
...
}
class Coche {
int x;
public:
Coche(int _x) : x(_x) { };
void mover(Carretera &c); //Cambiado
};
void Coche::mover(Carretera &c) { //Cambiado
while (this->x >= c.limite_der) { //Cambiado r->limite_der por r.limite_der
this->x++;
}
}
int main() {
Carretera carr(0, 20);
Coche coche(carr.limite_der);
coche.move(carr); //Cambiado
return 0;
}
¿Hay alguna diferencia? ¿Qué es lo más correcto? ¿Por qué cambia la forma en la que accedo a un método o propiedad? (road->limit_r cambia a road.limit_r)
Cabe aclarar que creo que entiendo como funcionan los punteros y las referencias, lo que no entiendo es cual es la diferencia exacta entre hacerlo de una forma u otra, y sobre todo, no entiendo por qué cambia la forma de acceder a propiedades o métodos del objeto.
Muchas gracias, y disculpen mi ignorancia.