variable type try template how define conversion code c++ subclass friend

type - C++ herencia de amigos?



type conversion in c++ (4)

¿Hereda una subclase, las asociaciones de amigos de la clase principal (tanto de la clase principal como de otras clases relacionadas con la clase principal)?

O, para decirlo de otra manera, ¿cómo se aplica la herencia a la palabra clave de amigo?

Para expandir: Y si no, ¿hay alguna forma de heredar la amistad?

He seguido la sugerencia de Jon para publicar el problema de diseño:
Preguntas de diseño de clase C ++


La amistad no se hereda en C ++.

La norma dice (ISO / IEC 14882: 2003, sección 11.4.8):

La amistad no es hereditaria ni transitiva.


La respuesta es muy simple: no, las subclases no heredan asociaciones de amigos. Un amigo solo puede acceder a los miembros privados de la clase en la que se declara la asociación, no a los padres y / o hijos de esa clase. Aunque podría ser miembro protegido de una superclase, pero no estoy seguro de eso.


Puede crear métodos protegidos (estáticos) en el padre que le permitirán hacer cosas así.

class MyFreind { private: int m_member; friend class Father; }; class Father { protected: static int& getMyFreindMember(MyFreind& io_freind) { return io_freind.m_member; } }; class Son : public Father { public: void doSomething(MyFriend& io_freind) { int& friendMember = getMyFreindMember(io_freind); // .... } // () };

Sin embargo, esto evita la encapsulación, por lo que probablemente debería echar un segundo vistazo a su diseño.