// Start the program // Create the base class and declare the data member under protected access specifier and declare the function // Create the derived class and access the base class data members in the derived class // Create the object for derived class // Call the public member function of the derived class // Compile and run the program #include #include #include 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() = 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[4]; shapes[0] = &Triangle("right", 8.0, 12.0); shapes[1] = &Rectangle(10); shapes[2] = &Rectangle(10, 4); shapes[3] = &Triangle(7.0); for(int i=0; i < 4; i++) { cout << "object is " << shapes[i]->getName() << "\n"; cout << "Area is " << shapes[i]->area() << "\n\n"; } return 0; }