2009-02-28 29 views
14

Supongamos que tengo una clase Base:¿La amistad se hereda en C++?

class Base { 
    friend SomeOtherClass; 
}; 

y hay otro (diferente) clase que hereda de Base:

class AnotherClass : public Base {} 

es la amistad heredó así?

+0

Otra pregunta que debería haber sido respondida fácilmente usando un COMPILADOR. – shoosh

+8

@shoosh: los compiladores no se ajustan necesariamente a las normas. Tal pregunta debe ser respondida por el estándar, no por los compiladores. –

+0

@shoosh ¿Qué compilador? VS para Windows o g ++ para Unix? ¿Qué versión de C++ estándar? Hay muchas preguntas que puede hacer incluso si el compilador funciona o no funciona. – user3728501

Respuesta

19

En principio, una clase derivada hereda todos los miembros de una clase base, excepto:

* its constructor and its destructor 
* its operator=() members 
* its friends 

Así, no. Los amigos no son heredados.

+5

Es interesante que haya elegido la redacción exacta para decir que, como este sitio web: http://www.cplusplus.com/doc/tutorial/inheritance/ – dicroce

+0

Quizás una buena pregunta para hacer ahora es ¿puede hacer que la amistad se herede? ? Sin duda sería útil para lo que estoy haciendo en lugar de escribir una lista de todas las clases en las que quiero tener "amistad". – user3728501

7
+0

El ejemplo en el enlace muestra el caso opuesto a la pregunta del OP. Me gustaría agregar que 'SomeOtherClass' tendrá acceso a los campos' Base' y métodos heredados en los objetos de 'AnotherClass'. –

9

No, no lo es.

Editar: citar el estándar de C++, la sección de 11,4/8

amistad ni se hereda ni transitiva.

Cuestiones relacionadas