I learned that pure virtual function can be called in abstract classes.
Let’s look at an example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
   | #include <iostream> using namespace std;
  class CPolygon {   protected:     int width, height;   public:     void set_values (int a, int b)       { width=a; height=b; }     virtual int area (void) =0;     void printarea (void)       { cout << this->area() << endl; }   };
  class CRectangle: public CPolygon {   public:     int area (void)       { return (width * height); }   };
  class CTriangle: public CPolygon {   public:     int area (void)       { return (width * height / 2); }   };
  int main () {   CRectangle rectangle;   CTriangle triangle;   CPolygon * ppoly1 = &rectangle;   CPolygon * ppoly2 = ▵   ppoly1->set_values (4,5);   ppoly2->set_values (4,5);   ppoly1->printarea();   ppoly2->printarea();   return 0; }
   | 
 
The output will be:
Reference:
Polymorphism