Polimorfism

Polimorfismul permite ca metode cu același nume să se comporte diferit în funcție de tipul obiectului. Se realizează prin suprascrierea (override) metodelor.

polymorphism.cpp
class Forma {
public:
  virtual double arie() { return 0; }  // virtual!
};

class Dreptunghi : public Forma {
  double l, lat;
public:
  Dreptunghi(double l, double lat) : l(l), lat(lat) {}
  double arie() override { return l * lat; }
};

class Cerc : public Forma {
  double r;
public:
  Cerc(double r) : r(r) {}
  double arie() override { return 3.14159 * r * r; }
};

void afisArie(Forma* f) {
  cout << "Aria: " << f->arie() << endl;
}

Dreptunghi d(3, 4);
Cerc c(5);
afisArie(&d);  // 12
afisArie(&c);  // 78.54