tutorial multiple biology c++ inheritance

multiple - override c++



Herencia selectiva C++ (1)

Desde el punto de vista del idioma, no hay nada de malo en esto (si es un buen diseño es otra cuestión).

Cualquier clase puede optar por exponer a una audiencia más amplia las cosas a las que tiene acceso.

En principio, su ejemplo no es diferente a:

class B : private A { public: void bar() { foo(); } };

excepto que aquí foo() está expuesto por proxy.

Lo que no puede hacer es lo contrario: una clase derivada públicamente no puede restringir el acceso a cosas que son accesibles a través de la clase base.

¿Podría explicar por qué el siguiente código se compila y funciona bien (verificado en gcc-4.3.4)? Pensé que la herencia selectiva no puede debilitar o incluso fortalecer el acceso a los miembros / métodos. ¿No rompe las reglas de encapsulación?

#include <iostream> class A { protected: void foo() { std::cout << "foo" << std::endl; } }; class B : private A { public: using A::foo; //foo() becomes public?! }; int main() { B b; b.foo(); return 0; }