En C++, cuando una clase hereda de otra, podemos especificar cómo se deben heredar los miembros públicos y protegidos de la clase base. Esto se hace mediante el tipo de herencia, que puede ser public, protected o private.
public: Herencia Pública
class Animal {
public:
void respirar() {}
};
class Perro : public Animal {
// "respirar" sigue siendo público
};
Es la más común para relaciones del tipo es-un (ej: un perro es un animal). Y queda todo como el padre, los metodos publicos y protejidos siguen publicos y protejidos en el hijo.
protected: Herencia Protegida
class Perro : protected Animal {
// "respirar" pasa a ser protegido
};
Esta forma rara vez se usa, pero puede servir para limitar el acceso desde fuera sin perder herencia funcional. Los metodos publicos y protejidos pasan a protejidos en el hijo.
private: Herencia Privada
class Perro : private Animal {
// "respirar" pasa a ser privado
};
Es útil cuando querés usar la funcionalidad de la clase base sin exponer su interfaz públicamente. Los metodos publicos y protejidos pasan a privados en el hijo.
Y si no pongo nada ¿Cuál es el valor por defecto?
El valor por defecto en las clases es private y en los structs public.