#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
9.29.polymorphism |
| 9.29.1. | Use virtual functions and polymorphism. |