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;
}