¿Cuál es la diferencia entre herencia public, protected y private en C++?
¡Saludos, colegas! He empezado a estudiar C++ y me he encontrado con confusión en la herencia. Entiendo que hay tres especificadores de acceso: public, protected y private. Pero cuando intento aplicarlos a la herencia, me pierdo. Por ejemplo, tengo una clase base:
```cpp
class Base {
public:
int pub = 1;
protected:
int prot = 2;
private:
int priv = 3;
};
```
Quiero crear una clase Derived que herede de Base. He probado a escribir `class Derived : public Base`, `class Derived : protected Base` y `class Derived : private Base`. En cada caso el comportamiento es diferente, pero no logro entender cuál es exactamente la diferencia. ¿Por qué, por ejemplo, con herencia private no puedo acceder a pub desde fuera? ¿Y qué es la "accesibilidad" de los miembros de la clase derivada?
Me parece que estoy pasando por alto alguna lógica fundamental. Agradecería una explicación con ejemplos, preferiblemente desde el punto de vista de cómo afecta al código al intentar usar los miembros heredados. ¡Gracias de antemano!