This line creates an object of type CRectangle in the heap and assigns the address of the object to the pointer of type CPolygon.
So if you will access the object through this pointer the object will be interpreted as an object of type CPolygon. That means that you can only those methods that were defined for class CPolygon. But becuase function area is virtual then when you will call it the following way
then instead of function area declared in class CPolygon function area defined in class CRectangle will be used.
CRectangle is not an abstract class so you can create objects of this class. You only assign address of the created CRectangle object to pointer of type CPolygon. Now if you will use this pointer that is of type CPolygon you can call only those methods that were defined in class CPolygon because the static type of the pointer is CPolygon *