#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Zaposlenik {
private:
string ime;
string prezime;
int godineRadnogStaza;
public:
Zaposlenik(const string& ime, const string& prezime, int godineRadnogStaza); //konstruktor
void postaviGodineRadnogStaza(int godineRadnogStaza); // Getteri i setteri za podatke o zaposleniku
int dohvatiGodineRadnogStaza() const;
};
class Tvrtka {
private:
string OIB;
string naziv;
string adresa;
vector<Zaposlenik*> zaposlenici; // Popis zaposlenika
public:
Tvrtka(const string& OIB, const string& naziv, const string& adresa); //konstruktor
Tvrtka::~Tvrtka(); // Destruktor
Tvrtka(const Tvrtka& other); // Kopirni konstruktor
Tvrtka& operator=(const Tvrtka& other); // Operator pridru??ivanja sa dubokim kopiranjem
Tvrtka& operator=(Tvrtka&& other); // Operator pridru??ivanja sa semantikom prijenosa
void dodajZaposlenika(Zaposlenik* zaposlenik); // Dodavanje zaposlenika u tvrtku
int brojZaposlenika() const; // Dohvat broja zaposlenika u tvrtki
};
Zaposlenik::Zaposlenik(const string& ime, const string& prezime, int godineRadnogStaza)
{
}
// B DIO ZADATKA!!! Setter za postavljanje godina radnog sta??a
void Zaposlenik::postaviGodineRadnogStaza(int godineRadnogStaza) {
if (godineRadnogStaza >= 0 && godineRadnogStaza <= 35) {
this->godineRadnogStaza = godineRadnogStaza;
}
}
// Getter za dohvat godina radnog sta??a
int Zaposlenik::dohvatiGodineRadnogStaza() const {
return godineRadnogStaza;
}
//C DIO ZADATKA
Tvrtka::Tvrtka(const string& OIB, const string& naziv, const string& adresa)
{
}
Tvrtka::Tvrtka(const Tvrtka& other) { // Kopirni konstruktor
OIB = other.OIB;
naziv = other.naziv;
adresa = other.adresa;
for (Zaposlenik* zaposlenik : other.zaposlenici) { // Kopiranje zaposlenika
zaposlenici.push_back(new Zaposlenik(*zaposlenik));
}
}
int main() { // Demonstracija kopirnog konstruktora u funkciji main:
Tvrtka originalnaTvrtka("123456789", "Originalna tvrtka", "Adresa 1"); // Kreiranje originalne tvrtke
Zaposlenik* zaposlenik1 = new Zaposlenik("Ivan", "Ivi??", 5); // Dodavanje zaposlenika u originalnu tvrtku
originalnaTvrtka.dodajZaposlenika(zaposlenik1);
Zaposlenik* zaposlenik2 = new Zaposlenik("Ana", "Ani??", 10);
originalnaTvrtka.dodajZaposlenika(zaposlenik2);
Tvrtka novaTvrtka = originalnaTvrtka; // Kopiranje originalne tvrtke u novu tvrtku
cout << "Broj zaposlenika u originalnoj tvrtki: " << originalnaTvrtka.brojZaposlenika() << endl; // Ispis broja zaposlenika u originalnoj i novoj tvrtki
cout << "Broj zaposlenika u novoj tvrtki: " << novaTvrtka.brojZaposlenika() << endl;
return 0;
}
//D DIO ZADATKA!!!!!!!!!!
Tvrtka& Tvrtka::operator=(const Tvrtka& other) { // Operator pridru??ivanja sa dubokim kopiranjem
if (this == &other) {
return *this;
}
for (Zaposlenik* zaposlenik : zaposlenici) { // Dealociranje postoje??ih zaposlenika
delete zaposlenik;
}
zaposlenici.clear();
OIB = other.OIB; // Kopiranje podataka iz other
naziv = other.naziv;
adresa = other.adresa;
for (Zaposlenik* zaposlenik : other.zaposlenici) { // Kopiranje zaposlenika
zaposlenici.push_back(new Zaposlenik(*zaposlenik));
}
return *this;
}
//E DIO ZADATKAAAAAAAAAAAAAAAA
Tvrtka& Tvrtka::operator=(Tvrtka&& other) { // Operator pridru??ivanja sa semantikom prijenosa
if (this == &other) {
return *this;
}
for (Zaposlenik* zaposlenik : zaposlenici) { // Dealociranje postoje??ih zaposlenika
delete zaposlenik; // DESTRUKTORRRRRRRRRRRRR
}
zaposlenici.clear();
OIB = move(other.OIB); // Prijenos podataka iz other
naziv = move(other.naziv);
adresa = move(other.adresa);
zaposlenici = move(other.zaposlenici);
return *this;
}