Tengo una duda relacionada con las funciones de amigo en C++. La función Friend no es una función miembro de las claas y puede invocarse directamente desde la principal. Entonces, ¿qué diferencia hace si mantenemos la función friend
dentro de la private
o la public
parte de class
. En general, he notado que las funciones friend
siempre están en la parte pública. En qué situación deberíamos mantener la función friend
dentro de private
.Funciones de amigo en C++
Respuesta
El compilador no presta atención a si una función de amigo se encuentra en la sección privada o pública (o protegida) de una clase. La mayoría de las personas lo ubica en la sección pública, pero será públicamente visible independientemente de dónde lo ubique.
No importa si lo declaras en la parte public:
o private:
de la clase. Funcionará igual independientemente.
Una razón para tener las declaraciones de amigos en la sección private
es que puede mantenerlas juntas con las funciones miembro u objetos a los que se supone que tienen acceso.
Aparte de eso, no hay diferencia.
La palabra clave aquí es sólo friend
conceder private
acceso a otra función que no es parte de su clase. Dado que no es parte de su clase, no se ve afectado por los especificadores public/private
.
no importa dónde pones la declaración de amistad. Puede existir dentro de cualquiera de las partes de la clase (pública, privada o protegida) pero debe colocarse fuera de cualquier función o agregado.
Aquí es un buen ejemplo y explicación de www.cprogramming.com:
A menudo es útil para una clase para ver las variables privadas de otra clase, a pesar de que probablemente no deben hacerse estas variables parte de la interfaz pública que admite la clase. Por ejemplo, si estaba escribiendo un árbol binario, es posible que desee utilizar una clase de nodo que tenga datos privados, pero aún sería conveniente para las funciones que realmente combinan nodos para poder acceder a los datos directamente sin tener que trabajar a través de la interfaz Node. En ocasiones, incluso no es apropiado que una función de acceso a proporcione acceso indirecto a los datos.
- 1. C++: ¿las funciones de amigo deben estar definidas en el archivo de encabezado?
- 2. Clase de amigo sin usar en C++
- 3. C# interno VS VBNET amigo
- 4. C++ plantilla amigo operador sobrecarga
- 5. ¿Cuándo debería preferir las funciones de no amigo no miembro a las funciones de miembro?
- 6. Cuándo utilizar la clase amigo en C++
- 7. c + + clase con objetivo-c amigo
- 8. función de amigo en php?
- 9. Modelando relaciones de amigo de amigo en MongoDB
- 10. Clases de "amigo" en python
- 11. funciones dentro de las funciones en C
- 12. Interacción de espacio de nombres y amigo en C++?
- 13. C++ función de amigo - sobrecarga del operador istream >>
- 14. clases amigo recursivas
- 15. Visualizar el gráfico de Amigo de un amigo (foaf)
- 16. Funciones recursivas en C/C++
- 17. Parámetro de plantilla como amigo
- 18. Plantilla amigo
- 19. ¿Usar una clase de amigo frente a agregar descriptores de acceso para pruebas unitarias en C++?
- 20. Funciones externas en C++
- 21. funciones ambiguas en C++
- 22. sobrecarga de funciones en C
- 23. Composición de funciones en C++
- 24. Funciones de referencia en C++
- 25. sobrecarga de funciones en C++
- 26. Funciones de MATLAB en C++
- 27. funciones de salida en C
- 28. ADL y amigo inyección
- 29. Amigo de la plantilla
- 30. ¿Cuál es el equivalente de C# de un amigo?
No sé por qué esto se está acercando votos ... Esta es una pregunta perfectamente razonable (si mal redactada). – ildjarn
+1 - "¿Cuándo es un buen diseño para hacer una función de amigo privado?" Es una pregunta muy buena. (O ¿por qué nunca?) – djechlin
"La declaración de amigo se puede colocar en cualquier lugar de la declaración de clase. No se ve afectada por las palabras clave de control de acceso". - http://en.wikipedia.org/wiki/Friend_function –