#include <iostream>
using namespace std;

class Vozilo {
private:
    string marka;
    string model;
    int godina;
    float consumption;
    
public:
    Vozilo() {}
    Vozilo(string _marka, string _model, int _godina, float _consumption) {
        marka = _marka;
        model = _model;
        godina = _godina;
        consumption = _consumption;
    }
    Vozilo(const Vozilo & tmp) {
        marka = tmp.marka;
        model = tmp.model;
        godina = tmp.godina;
        consumption = tmp.consumption;
    }
    virtual ~Vozilo() {}
    
    virtual void print() {
        cout << marka << " " << model << " " << godina << " " << consumption << endl;
    }
    
    virtual int value() {
        return godina * consumption;
    }
    
};

class Avtomobil : public Vozilo {
private:
    int garancija;
public:
    Avtomobil() : Vozilo() {}
    Avtomobil(string _marka, string _model, int _godina, float _consumption, int _garancija) : Vozilo(_marka, _model, _godina, _consumption) {
        garancija = _garancija;
    }
    Avtomobil(const Avtomobil & tmp) : Vozilo(tmp) {
        garancija = tmp.garancija;
    }
    virtual ~Avtomobil() {}
    
    virtual void print() override {
        Vozilo::print();
        cout << garancija << endl;
    }
    
    virtual int value() override{
        int original_value = Vozilo::value();
        return original_value + garancija * 10;
    }
    
};
class Kamion : public Vozilo {
private:
    int tezhina;
    
public:
    Kamion() : Vozilo() {}
    Kamion(string _marka, string _model, int _godina, float _consumption, int _tezhina) : Vozilo(_marka, _model, _godina, _consumption) {
        tezhina = _tezhina;
    }
    Kamion(const Kamion & tmp) : Vozilo(tmp) {
        tezhina = tmp.tezhina;
    }
    virtual ~Kamion() {}

    virtual void print() override {
        Vozilo::print();
        cout << tezhina << endl;
    }
    
    virtual int value() override{
        int original_value = Vozilo::value();
        return original_value + tezhina;
    }
};

void najgolema_vrednost(Vozilo ** niza, int n) {
    int najgolema_vrednost = niza[0]->value();
    
    for(int i = 0; i < n; i++) {
        if(niza[i]->value() > najgolema_vrednost) {
            najgolema_vrednost = niza[i]->value();
        }
    }
    cout << najgolema_vrednost << endl;
    
}
int main()
{
    
    Vozilo * car = new Avtomobil("audi", "a3", 7, 5, 15);
    Vozilo * truck = new Kamion("man", "man", 15, 20, 5000);
    
    
    Vozilo * niza[2];
    niza[0] = car;
    niza[1] = truck;
    
    najgolema_vrednost(niza, 2);
    
    
    return 0;
}

/*
 9
 i
 s
 p
 i
 t
 
 p
 s
 p
 

 
 **/
