Use virtual functions and polymorphism. : Polymorphism « Class « C++






Use virtual functions and polymorphism.

Use virtual functions and polymorphism.
 

 
#include <iostream> 
#include <cstring> 
using namespace std; 
 
class TwoDimensionShape { 
  double width; 
  double height; 
  char name[20]; 
public: 
 
  TwoDimensionShape() { 
    width = height = 0.0; 
    strcpy(name, "unknown"); 
  } 
 
  TwoDimensionShape(double w, double h, char *n) { 
    width = w; 
    height = h; 
    strcpy(name, n); 
  } 
 
  TwoDimensionShape(double x, char *n) { 
    width = height = x; 
    strcpy(name, n); 
  } 
 
  void showDim() { 
    cout << "Width and height are " << width << " and " << height << endl; 
  } 
 
  double getWidth() { 
     return width; 
  } 
  double getHeight() { 
     return height; 
  } 
  void setWidth(double w) { 
     width = w; 
  } 
  void setHeight(double h) { 
     height = h; 
  } 
  char *getName() { 
     return name; 
  } 
 
  virtual double area() {   
    cout << "Error: area() must be overridden.\n";  
    return 0.0;  
  }   
 
}; 
 
class Triangle : public TwoDimensionShape { 
  char style[20]; // now private 
public: 
 
  Triangle() { 
    strcpy(style, "unknown"); 
  } 
 
  Triangle(char *str, double w, 
           double h) : TwoDimensionShape(w, h, "triangle") { 
    strcpy(style, str); 
  } 
   
  Triangle(double x) : TwoDimensionShape(x, "triangle") { 
    strcpy(style, "isosceles");  
  } 
 
  double area() { 
    return getWidth() * getHeight() / 2; 
  } 
 
  void showStyle() { 
    cout << "Triangle is " << style << endl; 
  } 
}; 
 
class Rectangle : public TwoDimensionShape { 
public: 
 
  
  Rectangle(double w, double h) : TwoDimensionShape(w, h, "rectangle") { }  
  

  Rectangle(double x) :  
    TwoDimensionShape(x, "rectangle") { }  
 
  bool isSquare() { 
    if(getWidth() == getHeight()) 
       return true; 
    return false; 
  } 
 
  // This is another override of area().   
  double area() { 
    return getWidth() * getHeight(); 
  } 
}; 
 
int main() { 
 
  TwoDimensionShape *shapes[5]; 
  
  shapes[0] = &Triangle("right", 8.0, 12.0);  
  shapes[1] = &Rectangle(10);  
  shapes[2] = &Rectangle(10, 4);  
  shapes[3] = &Triangle(7.0);  
  shapes[4] = &TwoDimensionShape(10, 20, "generic"); 
  
  for(int i = 0; i < 5; i++) {  
    cout << "object is " << shapes[i]->getName() << endl;  
 
    cout << "Area is " << shapes[i]->area() << endl;  
  
    cout << endl;    
  }  
 
  return 0; 
}



           
         
  








Related examples in the same category

1.Object array: polymorphism. Object array: polymorphism.
2.An example that uses typeid on a polymorphic class hierarchyAn example that uses typeid on a polymorphic class hierarchy
3.Polymorphism with base class pointer
4.dynamic allocation and polymorphism