C/Visual C - ¿Funciones que devuelven referencias?

 
Vista:

¿Funciones que devuelven referencias?

Publicado por BluSky (11 intervenciones) el 27/08/2003 00:17:50
Una nueva duda con C++: Implemento una clase VECTOR de enteros que simula el comportamiento de un vector; sobrecargo el operador de indexación y... aquí viene la duda: Implemento la función en la clase:
int operator[](int n) {return V[n-1];};
y funciona correctamente:-)))
pero si le añado un ampersan (&) delante de "Operator[]" también funciona sin problema. En este último caso ¿no debería devolver una referencia?´Pienso que en lugar de devolver V[n-1] (Valor) debería ser &V[n-1] (su referencia). ¿Alguien puede aclarármelo?. He comprobado que, esto mismo, sucede con la s0brecarga de otros muchos operadores.
Saludos
Sebas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Funciones que devuelven referencias?

Publicado por chuidiang (677 intervenciones) el 27/08/2003 10:27:18
Una cosa son las referencias y otras los punteros.

Si devuelves int *, si debes devolver un puntero, que se obtiene con
return &V[n-1];

Si devuelves int & debes devolver una variable entera (no un entero). Seria incorrecto return 3; Al devolver int & estás devolviendo la variable en si misma, asi que podrias modificarla fuera. Sería valido, si unVector es un objeto de tu clase, hacer esto

unVector [n-1] = 3; // Esto mete un tres dentro de tu array. es equivalente a unVector.V[n-1] = 3;
o esto
int a = unVector[n-1]; // equivalente a int a = unVector.V[n-1];

Si devuelves int, estas devolviendo un entero, no una variable. Puedes poner return 3; Si pones return V[n-1] estas devolviendo el entero que esta en ese array, no la variable. Luego no puedes hacer esto
Vector[n-1] = 33; // da error al compilar, es equivalente a 3 = 33;
aunque si esto
int a = Vector[n-1]; // equivalente a int a = 3;

Esto vale tambien cuando lo admites en un parametro

int a;

void funcion (int) -> Admite un entero --> funcion(22) o bien funcion(a) Si cambias la a dentro, no cambia fuera

void funcion (int *) -> Admite un puntero --> funcion(&a)

void funcion (int &) -> Admite una variable entera --> funcion(a) Si la cambias dentro, cambia fuera. Es incorrecto funcion (3)

Espero haberte aclarado algo.

Se bueno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar