#include <iostream>
// Define an abstract class with a pure virtual function
class Shape {
public:
virtual void draw() const = 0; // Pure virtual function
virtual double area() const = 0; // Another pure virtual function
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
void draw() const override {
std::cout << "Drawing Circle." << std::endl;
}
double area() const override {
return 3.14159 * radius * radius;
}
private:
double radius;
};
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
void draw() const override {
std::cout << "Drawing Rectangle." << std::endl;
}
double area() const override {
return width * height;
}
private:
double width, height;
};
int main() {
Circle circle(5.0);
Rectangle rectangle(4.0, 6.0);
Shape* shapes[] = { &circle, &rectangle };
for (Shape* shape : shapes) {
shape->draw();
std::cout << "Area: " << shape->area() << std::endl;
}
return 0;
}