#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Trener {
private:
string ime;
string prezime;
string adresa;
public:
Trener() : ime("ime"), prezime("prezime"), adresa("adresa"){}
Trener(string _ime, string _prezime, string _adresa) {
ime = _ime;
prezime = _prezime;
adresa = _adresa;
}
};
namespace ClanKluba {
class Igrac {
private:
string ime;
string prezime;
int cijena;
public:
Igrac() = default;
Igrac(string _ime, string _prezime, int _cijena) {}
string getIme() const { return ime; }
string getPrezime()const { return prezime; }
int getCijena() const { return cijena; }
void setCijena(int novaCijena);
};
Igrac::Igrac(string _ime, string _prezime, int _cijena) {
ime = _ime;
prezime = _prezime;
cijena = _cijena;
}
void Igrac::setCijena(int novaCijena) {
if (novaCijena < 0)
cout << "nemre bit manje od 0";
else
cijena = novaCijena;
}
}
class Klub {
public:
string naziv;
string adresa;
Trener trener;
vector <ClanKluba::Igrac*> popisIgraca;
Klub(string _naziv, string _adresa, Trener _trener) {
naziv = _naziv;
adresa = _adresa;
trener = _trener;
}
~Klub() {
for (int i = 0; i < popisIgraca.size(); i++) {
delete popisIgraca[i];
}
popisIgraca.clear();
}
};
int main() {
Trener trener("marko", "markovic", "ulica 1");
Klub klub("klub1", "gradkluba", trener);
ClanKluba::Igrac* igrac1 = new ClanKluba::Igrac("ivan", "pavao", 123);
ClanKluba::Igrac* igrac2 = new ClanKluba::Igrac("pero", "peric", 2322);
klub.dodajIgraca(igrac1);
klub.dodajIgraca(igrac2);
return 0;
}
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;
}