#include <iostream>

struct base {
protected:        // similar a private, pero los tipos derivados sí podrán acceder a lo protegido
   int a;
};

struct derivado : base {
   void pon_a(int v) {
      a = v;      // ok: como estamos en un tipo derivado, sí podemos usar a
   }
};

int main( ) {
   derivado d;
   d.a = 5;       // mal
   d.pon_a(5);    // ok, pero... si la función no valida el valor dado, ¿para qué querríamos bloquear el acceso a la variable .a en primer lugar?
}
