enks

#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;
}