Polimorfismo: un mecanismo de herencia en POO, tal que
class Coche {};
class Renault: class Coche {};
class Peugeot: class Coche {};
Coche* polimorfo = new Renault();
delete polimorfo;
Coche* polimorfo = new Peugeot();
delete polimorfo;
Creo que un caso de uso queda claro con este ejemplo. Te recomiendo que te mires también los métodos virtuales en este contexto.
Encapsulamiento: aislar los atributos de las demás clases. Generalizando, limitar el acceso a los datos a los métodos de la misma clase, haciendo que cada clase siempre ofrezca acceso a sus datos a través de métodos y no directamente. Por ejemplo:
class Coche
{
private:
int velocidad;
public:
int obtenerVelocidad();
};
int Coche::obtenerVelocidad(void)
{
return velocidad;
}
Coche cochazo;
// El encapsulamiento nos prohibe hacer esto
cout << cochazo.velocidad;
// pero si nos deja hacer esto
cout << cochazo.obtenerVelocidad();
Esto es para asegurar de que el acceso a los datos se hace siempre con control de la clase, así nunca terminará con datos en estados corruptos o desconocidos para la clase misma. Esto implica que los atributos deben ser como mínimo
protected salvo casos muy especiales.
Para más detalles y formalidades:
PolimorfismoEncapsulamientoSaludos