Teniendo en cuenta el código de ejemplo:¿Un amigo ve las clases base?
class Base {
public:
bool pub;
protected:
bool prot;
};
class Derived : private Base {
friend class MyFriend;
};
class MyFriend {
Derived _derived;
void test() {
// Does standard provide me access to _derived.pub and _derived.prot?
cout << "Am I allowed access to this: " << _derived.pub
<< " and this: " << _derived.prot;
}
};
¿Ser un amigo me dan todos los accesos que obtendría como si fuera una función miembro de la clase a la que soy un amigo? En otras palabras, ¿puedo acceder a los miembros protegidos y públicos de la clase base que se hereda de forma privada desde que soy un amigo?
En vista de que usted ha tomado la molestia de escribir código de ejemplo, has * * compilación? Este tipo de respuesta saldría a la luz rápidamente en las advertencias/falta de. – ssube
@peachykeen: lo que los compiladores aceptan y lo que dice el estándar son a menudo cosas diferentes. Además, podría haber, en teoría, sutilezas que el código de muestra no captura. –
@AdrianMcCarthy Eso es verdad. Sin embargo, muchos compiladores advertirán cuando se utilicen características no estándar, y si va en contra del estándar y la implementación del compilador, obtendrá una respuesta breve y dulce. Si bien no es infalible, no puede doler intentarlo. – ssube