Add virtual to a base class method so derived overrides are called through a base pointer:
class Animal {
public:
virtual string speak() { return "..."; }
virtual ~Animal() {} // always virtual destructor!
};
class Dog : public Animal {
public:
string speak() override { return "Woof!"; }
};
Animal* a = new Dog();
cout << a->speak(); // "Woof!" — correct at runtime!
delete a;
class Shape {
public:
virtual double area() = 0; // must override in subclass
virtual ~Shape() {}
};
// Cannot instantiate Shape directly
Create abstract Shape with pure virtual area() and perimeter().
Implement Rectangle (w, h) and Circle (r).
Write totalArea(vector<Shape*> shapes).
Click "Run" to execute your code.