vitae tener que poner objetivos llevar habilidades experiencia ejemplos ejemplo debe datos curriculum cosas c++ friend

c++ - tener - que poner en un curriculum en objetivos



Alcance de amigo en C++ (5)

Acabo de encontrar este artículo mientras espero respuestas. Responde bastante bien a mi pregunta: Alcance de amigo en C ++

Si tengo tres clases, A, B, C. A y B son amigos (bidireccionalmente). Además, B y C son amigos (bidireccionalmente). A tiene un puntero a B y B tiene un puntero a C. ¿Por qué no puede A acceder a los datos privados de C a través del puntero?

Solo para aclarar: esta es una pregunta puramente teórica sobre el lenguaje C ++, no una pregunta sobre consejos de diseño.


La amistad en C ++ no es transitiva:

(A is friend of B) and (B is friend of C) does not mean (A is friend of C)

Además, la amistad no es simétrica.

(A is friend of B) does not mean (B is friend of A)

Tienes que declarar explícitamente que A es amigo de C para poder acceder a cosas privadas de C desde A. Si agregar un setter y un getter a una clase expone información que no debe exponerse, debes considerar amigos si no puedes encuentra que tu diseño está defectuoso (usar friend es válido. No es un signo de mal diseño). Si puede agregar un setter y getter sin que sea destructivo para la interfaz, entonces debe evitar hacer amigos a otras clases. Tenga en cuenta que una clase anidada siempre es amiga de la clase de anidación. Entonces, una clase anidada puede ver las partes privadas de la clase de anidamiento.


Porque en C ++ la amistad no es una propiedad transitiva. En realidad, debe evitarse siempre que sea posible porque introduce complejidad en un sistema.

Imagine que B es una clase de mediador y A y C son componentes que necesitan ser administrados, ¿realmente cree que tiene sentido que un botón deba tener acceso a la implementación de una casilla de verificación?

Por cierto, no veo dónde está la "jerarquía" de tu título en el caso que preguntas.


La amistad en C ++ no es transitiva:

John es amigo mío y puede usar mi conexión inalámbrica en cualquier momento (confío en él).
Sin embargo, el amigo de John, Tim, es un desperdicio y, aunque John es mi amigo, no incluyo a Tim como amigo, por lo que no le dejo usar mi conexión inalámbrica.

La amistad NO es heredada

Además, los hijos de John son un montón de gamberros, así que no confío en ellos tampoco definitivamente no son mis amigos ni son mis propios hijos, en quienes confío hasta donde puedo arrojarlos.

Aunque nuestros niños no pueden acceder directamente a la red inalámbrica, pueden acceder a ella si pasan por nosotros. Entonces, los hijos de John pueden acceder a mi red inalámbrica si acceden a ella a través de John (es decir, John los supervisa y protege ).

Además, la amistad no es simétrica.

John tiene un trabajo de gobierno, por lo que desafortunadamente no puede confiar en nadie, especialmente cuando se trata de conexión inalámbrica.

Tu siempre eres tu mejor amigo.

Esto permite cosas como los constructores de copia donde se puede acceder al miembro privado de otro objeto, aunque no haya accesos reales.

Así que también soy automáticamente amigo de todos mis clones :-) ya que son solo otras instancias de mí mismo.


Esto está bien resumido aquí:

What does it mean that "friendship isn''t inherited, transitive, or reciprocal"?

->

Significa que las clases derivadas de una clase de amigo no se hacen amigos automáticamente (¿confías en los hijos de tus amigos?), Un amigo de un amigo no se convierte automáticamente en un amigo (¿confías en los amigos de tus amigos?) , y que una clase que declara a otra clase como "amiga" no se convierta automáticamente en amiga de esa clase (¿confías en alguien que te llame como amigo?).

de

http://yosefk.com/c++fqa/friend.html#fqa-14.4