#include <iostream>
#include <list>
using namespace std;

class Vozilo {
      public: virtual double nosivost() const = 0;
};
class ZracnoVozilo  : public Vozilo {};
class KopnenoVozilo : public Vozilo {};
class VodenoVozilo  : public Vozilo {};
class Automobil : public KopnenoVozilo {
      public: double nosivost() const {return 500;}
};
class Bicikl : public KopnenoVozilo {
      public: double nosivost() const {return 80;}
};
class Kamion : public KopnenoVozilo {
      public: double nosivost() const {return 8000;}
};
class Tegljac : public Kamion {
      public: double nosivost() const {return 22000;}
};
class Avion : public ZracnoVozilo {
      public: double nosivost() const {return 50000;}
};class Brod : public VodenoVozilo {
      public: double nosivost() const {return 333000;}
};

double prosjek(list<Vozilo*> &pl, Vozilo &tip) { //type_info &
    double uk = 0.0; int br = 0;
    for (list<Vozilo*>::iterator it = pl.begin(); it != pl.end(); ++it) { 
        if ( typeid(**it) == typeid(tip) ) {
            uk += (*it)->nosivost(); ++br; 
        }
    }
    if (br == 0) return 0.0;
    return (uk / br);
       
}

int main() {
//    Vozilo L;
//      KopnenoVozilo KV;
        Automobil A, B; Bicikl C; Avion D; Kamion K;
    list<Vozilo*> pl;
    pl.push_back(&A);    pl.push_back(&B);
    pl.push_back(&C);    pl.push_back(&D);
    for (list<Vozilo*>::iterator it = pl.begin(); it != pl.end(); ++it)
        { cout << (*it)->nosivost() << endl; }
    cout << "Prosjecna nosivost je ";
    cout << prosjek(pl, K) << endl;
    return 0;
    
//    double d = (double) i;
    
}














