Use virtual function to calculate area for different shapes : virtual function « Class « C++ Tutorial






#include <iostream>  
  using namespace std;
  class Shape {  
  protected:  
    double x, y;  
  public:  
    void set_dim(double i, double j=0) {  
      x = i;  
      y = j;  
    }  
    virtual void show_area(void) {  
      cout << "No area computation defined ";  
      cout << "for this class.\n";  
    }  
  } ;  
       
  class triangle : public Shape {  
    public:  
      void show_area(void) {  
        cout << "Triangle with height ";  
        cout << x << " and base " << y;  
        cout << " has an area of ";  
        cout << x * 0.5 * y << ".\n";  
      }  
  };  
       
  class square : public Shape {  
    public:  
      void show_area(void) {  
        cout << "Square with dimensions ";  
        cout << x << "x" << y;  
        cout << " has an area of ";  
        cout << x *  y << ".\n";  
       }  
  };  
       
  class circle : public Shape {  
    public:  
      void show_area(void) {  
        cout << "Circle with radius ";  
        cout << x;  
        cout << " has an area of ";  
        cout << 3.14 * x * x;  
      }  
  } ;  
       
  main(void)  
  {  
    Shape *p;  
    triangle t; 
    square s;  
    circle c;  
       
    p = &t;  
    p->set_dim(10.0, 5.0);  
    p->show_area();  
       
    p = &s;  
    p->set_dim(10.0, 5.0);  
    p->show_area();  
       
    p = &c;  
    p->set_dim(9.0);  
    p->show_area();  
       
    return 0;  
  }








9.28.virtual function
9.28.1.A virtual function
9.28.2.Access base class's virtual if derived class does not redefine it
9.28.3.Use virtual functions and polymorphism
9.28.4.A pure virtual function
9.28.5.Multiple virtual member functions called in turn
9.28.6.Class with only virtual methods
9.28.7.Use virtual function to calculate area for different shapes
9.28.8.Use Virtual Functions to change the method behaviour
9.28.9.Why Virtual Functions: one interface, multiple methods
9.28.10.Implementing pure virtual functions