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