I've gone through several books they explain Upcasting as
Base class pointer pointing to Drived class Object

this definition is correct.

Drived class pointer pointing to base class object..

i got a bit confused.....not having crystal clear image in my mind.....
if the above definition is correct... whats wrong with the below code

class Shape {
   virtual ~Shape() {}
class Circle: public Shape {
   ~Circle() {} 
int main() 
      //why this can't work ...........according to definition....
    //  Circle* c = dynamic_cast<Shape*>(new Shape);
     //why this
     Shape* s = new Shape;
     Circle* c = dynamic_cast<Circle*>(s);
     return 0;

I know that downcasting is performed between polymorphic types :) . I m bit confused with its definition and implementation... please give me the solid concept ;) .