Volviendo una referencia de una función en C ++

Es posible devolver una referencia desde una función. Pero tenga cuidado si intenta hacer esto: Usted no desea devolver una referencia a una variable local dentro de una función - porque cuando la función termina, el espacio de almacenamiento para las variables locales se va. ¡No es bueno!

Pero usted puede devolver una referencia a una variable global. O, si la función es una función miembro, puede devolver una referencia a una variable miembro.

Por ejemplo, aquí hay una clase que tiene una función que devuelve una referencia a una de sus variables:

clase DigInto {private: int secreto pública: DigInto () {secreta = 150-} int GetSecretVariable () {return secreto-} void Write () {cout lt; lt; secreto lt; lt; endl-}} -

Fíjese en las tiendas constructor 150 en el secreto variable, que es privada. los GetSecretVariable () función devuelve una referencia a la variable privada llamada secreto. Y el Escribir() función escribe el valor de la secreto variable. Un montón de secretos aquí! Y algunas sorpresas también. Puede utilizar esta clase de este modo:

int main (int argc, char * argv []) {DigInto inst-inst.Write () - int palanca = inst.GetSecretVariable () - palanca = 30 inst.Write () - volver 0-}

Al ejecutar este, verá el siguiente resultado:

15030

La primera línea es el valor en el derecho variable de secreto después de la aplicación crea la instancia. Pero mira el código cuidadosamente: La variable llamada palanca es una referencia a un número entero, y que llega a los resultados de GetSecretVariable (). ¿Y cuál es ese resultado?

Es una referencia a la variable privada llamada secreto - Lo que significa que palanca sí ya es una referencia a esa variable. Sí, una variable fuera de la clase ahora se refiere directamente a un miembro privado de la instancia! Después de eso, se establece palanca a 30. Cuando se llama Escribir() de nuevo, la variable privada será hecho cambiar.

¿Eso parece una mala idea? Usted hace la variable privada. Y ahora el GetSecretVariable () función prácticamente acabó con cualquier sentido de la variable realmente restante privado. los main () función era capaz de agarrar una referencia a él y hurgar y cambiarlo sin embargo, quería, como si no fuera privado! Problemas en la tierra C ++!

Eso es un problema con las referencias: Potencialmente pueden dejar su código de par en par. Por lo tanto, piense dos veces antes de volver a una referencia a una variable. Aquí está uno de los mayores riesgos: Alguien más podría estar utilizando este código, no pueden entender las referencias, y puede no darse cuenta de que la variable llamada palanca tiene un enlace directo a la privada secreto variable.

Tal programador inexperto podría entonces escribir código que utiliza y cambios palanca - sin darse cuenta que la variable miembro está cambiando junto con él. Más tarde, a continuación, una bicho resultados - un ser bastante desagradable en eso!

Debido a que las funciones de regresar referencias pueden dejar programadores de C ++ desprevenidos y con menos experiencia con sólo un poquito demasiado poder en sus manos, tenga cuidado con referencias. No, usted no tiene que evitarlos altogether- pero tenga cuidado. Úsalos sólo si realmente siente que debe hacerlo. Pero recuerda también que un enfoque mejor en clases es tener funciones de acceso a miembros que pueden protegerse las variables privadas.

Sin embargo, las referencias pueden ser muy poderosos, a condición de que usted entiende lo que hacen. Cuando se utiliza una referencia, puede modificar fácilmente otra variable sin tener que ir a través de punteros - que puede hacer la vida mucho más fácil a veces. Así que, por favor: Utilice sus nuevos poderes con cuidado.




» » » » Volviendo una referencia de una función en C ++