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.