Qual é a diferença entre herança public, protected e private em C++?
Olá, colegas! Comecei a estudar C++ e me deparei com confusão sobre herança. Entendo que existem três especificadores de acesso: public, protected e private. Mas quando tento aplicá-los à herança, fico perdido. Por exemplo, tenho uma classe base:
```cpp
class Base {
public:
int pub = 1;
protected:
int prot = 2;
private:
int priv = 3;
};
```
Quero criar uma classe Derived que herda de Base. Tentei escrever `class Derived : public Base`, `class Derived : protected Base` e `class Derived : private Base`. Em cada caso, o comportamento é diferente, mas não consigo entender exatamente qual é a diferença. Por que, por exemplo, na herança private não consigo acessar pub de fora? E o que é "acessibilidade" dos membros da classe derivada?
Acho que estou perdendo alguma lógica fundamental. Agradeceria uma explicação com exemplos, de preferência do ponto de vista de como isso afeta o código ao tentar usar membros herdados. Desde já, obrigado!