Mega Code Archive

 
Categories / C++ Tutorial / Class
 

Object array of derived classes

#include <iostream>  #include <cstring>  using namespace std;    class Shape {    double width;    double height;      char name[20];  public:    Shape() {      width = height = 0.0;      strcpy(name, "unknown");    }      Shape(double w, double h, char *n) {      width = w;      height = h;      strcpy(name, n);    }      Shape(double x, char *n) {      width = height = x;      strcpy(name, n);    }      void display() {      cout << "Width and height are " << width << " and " << height << "\n";    }      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 Shape {    char style[20]; public:      Triangle() {      strcpy(style, "unknown");    }      Triangle(char *str, double w, double h) : Shape(w, h, "triangle") {      strcpy(style, str);    }        Triangle(double x) : Shape(x, "triangle") {      strcpy(style, "isosceles");     }      double area() {      return getWidth() * getHeight() / 2;    }      void showStyle() {      cout << "Triangle is " << style << "\n";    }  };    class Rectangle : public Shape {  public:      Rectangle(double w, double h) : Shape(w, h, "rectangle") { }        Rectangle(double x) : Shape(x, "rectangle") { }       bool isSquare() {      if(getWidth() == getHeight())         return true;      return false;    }      double area() {      return getWidth() * getHeight();    }  };    int main() {    Shape *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] = &Shape(10, 20, "generic");       for(int i=0; i < 5; i++) {       cout << "object is " << shapes[i]->getName() << "\n";       cout << "Area is " << shapes[i]->area() << "\n\n";     }       return 0;  } object is generic Error: area() must be overridden. Area is 0 object is generic Error: area() must be overridden. Area is 0 object is generic Error: area() must be overridden. Area is 0 object is generic Error: area() must be overridden. Area is 0 object is generic Error: area() must be overridden. Area is 0