Uputstvo
Vektor unique_ptr<Zaposleni>; metode plata() označi sa override. Ne zaboravi virtuelni destruktor.
Rešenje (C++)
#include <bits/stdc++.h>
using namespace std;
class Zaposleni {
protected:
string ime;
public:
Zaposleni(string i) : ime(i) {}
virtual long long plata() const = 0;
string getIme() const { return ime; }
virtual ~Zaposleni() = default;
};
class Stalni : public Zaposleni {
long long iznos;
public:
Stalni(string i, long long p) : Zaposleni(i), iznos(p) {}
long long plata() const override { return iznos; }
};
class Honorarni : public Zaposleni {
long long sati, cena;
public:
Honorarni(string i, long long s, long long c) : Zaposleni(i), sati(s), cena(c) {}
long long plata() const override { return sati * cena; }
};
int main() {
int n;
cin >> n;
vector<unique_ptr<Zaposleni>> v;
for (int i = 0; i < n; i++) {
char t;
string ime;
cin >> t >> ime;
if (t == 'S') { long long p; cin >> p; v.push_back(make_unique<Stalni>(ime, p)); }
else { long long s, c; cin >> s >> c; v.push_back(make_unique<Honorarni>(ime, s, c)); }
}
long long ukupno = 0;
for (const auto& z : v) {
cout << z->getIme() << " " << z->plata() << "\n";
ukupno += z->plata();
}
cout << "ukupno " << ukupno << "\n";
return 0;
}