2012-06-19 30 views
13

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++

+1

No sé por qué esto se está acercando votos ... Esta es una pregunta perfectamente razonable (si mal redactada). – ildjarn

+0

+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

+5

"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 –

Respuesta

19

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.

4

No importa si lo declaras en la parte public: o private: de la clase. Funcionará igual independientemente.

2

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.

2

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.

0

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.