Ahora que ya sabe que es la herencia, la palabra reservada protected ya tiene significado. En un mundo ideal, los miembros privados siempre serian fijos-y-rápidos, pero en los proyectos reales hay ocasiones cuando se desea ocultar algo a todo el mundo y todavía permitir accesos a los miembros de la clase derivada. La palabra clave protected es un movimiento al pragmatismo: este dice "Esto es privado como la clase usuario en cuestión, pero disponible para cualquiera que hereda de esta clase.
La mejor manera es dejar los miembros de datos privados - siempre debe preservar su derecho de cambiar la capa de implementación. Entonces puede permitir acceso controlado a los herederos de su clase a través de funciones miembro protegidas:
//: C14:Protected.cpp // The protected keyword #include <fstream> using namespace std; class Base { int i; protected: int read() const { return i; } void set(int ii) { i = ii; } public: Base(int ii = 0) : i(ii) {} int value(int m) const { return m*i; } }; class Derived : public Base { int j; public: Derived(int jj = 0) : j(jj) {} void change(int x) { set(x); } }; int main() { Derived d; d.change(10); } ///:~
Listado 14.15. C14/Protected.cpp
Encontrará ejemplos de la necesidad de uso de protected más adelante y en el volumen 2.
Cuando se hereda, por defecto la clase base es privada, que significa que todos las funciones miembro publicas son privadas para el usuario en la nueva clase. Normalmente, heredará públicamente para que el interfaz de la clase base sea también el interfaz de la clase derivada. Sin embargo, puede usar la palabra clave protected durante la herencia.
Derivar de forma protegida significa "implementado en términos de" para otras clases pero "es-una" para las clases derivadas y amigas. Es algo que no utilizará muy a menudo, pero esta en el lenguaje para completarlo.