//figure.cpp

#include<iostream.h>

class figura
{public:
  // ...
  virtual double area() = 0;
};

class triangolo : public figura
{public:
  triangolo(double b, double a) { base = b; altezza = a; }
  // ...
  double area() { return base*altezza/2; }
 protected:
  double base, altezza;
};

class rettangolo : public figura
{public:
  rettangolo(double b, double a) { base = b; altezza = a; }
  // ...
  double area() { return base*altezza; }
 protected:
  double base, altezza;
};

class cerchio : public figura
{public:
  cerchio(double r) { raggio = r; }
  // ...
  double area() { return raggio*raggio*3.14; }
 protected:
  double raggio;
};

double areatotale(figura** vett, int n) {
  double ris = 0;
  for (int i = 0; i<n; i++)
    ris = ris + vett[i]->area();
  return ris;
}

void main () {
  triangolo t(10,10);
  cout << t.area() << endl;

  rettangolo r(10,10);
  cout << r.area() << endl;

  cerchio c(10);
  cout << c.area() << endl;

  figura** vett = new figura*[3];
  vett[0] = &t; vett[1] = &r; vett[2] = &c;
  cout << areatotale(vett, 3) << endl;
}

/*output:
  50
  100
  314
  464
*/
