Devolución de una referencia desde una función en c ++

Video: Devolver Referencias

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 termina la función, el espacio de almacenamiento para las variables locales desaparece. ¡No está bien!

Video: 23.- Curso Videotutoriales C++ ¿Usar Punteros O Referencias?

Pero se 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í está una clase que tiene una función que devuelve una referencia a una de sus variables:

Video: Tutorial de C++ 11: Enviar arreglos a funciones

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

Fíjese en las tiendas en el constructor 150 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 esta manera:

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

Cuando se ejecuta esto, se ve el resultado siguiente:

15030

La primera línea es el valor de la variable justo secreta 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 lo que es ese resultado?

Es una referencia a la variable privada llamada secreto - Lo que significa que palanca sí es ahora 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á de hecho cambiar.

¿Le parece una mala idea? Haces que la variable privada. Y ahora el GetSecretVariable () función casi acabó con cualquier sentido de la variable restante realidad privada. los principal() función era capaz de agarrar una referencia a él y saca alrededor y cambiarla sin embargo, quería, como si no fuera privada! Problemas en la tierra C ++!

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

Tal programador sin experiencia 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 error Resultados - una muy desagradable en ese!

Video: C++ - Transformar una funcion en una accion

Dado que las funciones de regresar referencias pueden dejar los programadores de C confiados 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- sólo tenga cuidado. Usarlos sólo si realmente siente que debe. Pero recuerda también que un mejor enfoque en las clases es tener acceso a las funciones miembro que pueden protegerse las variables privadas.

Sin embargo, las referencias pueden ser muy poderosos, a condición de que entiende lo que hacen. Cuando se utiliza una referencia, se 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: utilizar sus nuevos poderes con cuidado.

Artículos Relacionados