asd
<p>#include <iostream><br />
#include <vector><br />
#include <string></p>
<p>using namespace std;</p>
<p><br />
class Trener {<br />
private:<br />
string ime;<br />
string prezime;<br />
string adresa;<br />
public:<br />
Trener() : ime("ime"), prezime("prezime"), adresa("adresa"){}<br />
Trener(string _ime, string _prezime, string _adresa) {<br />
ime = _ime;<br />
prezime = _prezime;<br />
adresa = _adresa;<br />
}<br />
};</p>
<p><br />
namespace ClanKluba {<br />
class Igrac {<br />
private: <br />
string ime;<br />
string prezime;<br />
int cijena;<br />
public:<br />
Igrac() = default;<br />
Igrac(string _ime, string _prezime, int _cijena) {}<br />
string getIme() const { return ime; }<br />
string getPrezime()const { return prezime; }<br />
int getCijena() const { return cijena; }<br />
void setCijena(int novaCijena);<br />
};</p>
<p> Igrac::Igrac(string _ime, string _prezime, int _cijena) {<br />
ime = _ime;<br />
prezime = _prezime;<br />
cijena = _cijena;<br />
}<br />
void Igrac::setCijena(int novaCijena) {<br />
if (novaCijena < 0)<br />
cout << "nemre bit manje od 0";<br />
else<br />
cijena = novaCijena;<br />
}<br />
}</p>
<p>class Klub {<br />
public:<br />
string naziv;<br />
string adresa;<br />
Trener trener;<br />
vector <ClanKluba::Igrac*> popisIgraca;</p>
<p><br />
Klub(string _naziv, string _adresa, Trener _trener) {<br />
naziv = _naziv;<br />
adresa = _adresa;<br />
trener = _trener;<br />
}</p>
<p><br />
</p>
<p> </p>
<p> ~Klub() {<br />
for (int i = 0; i < popisIgraca.size(); i++) {<br />
delete popisIgraca[i];<br />
}<br />
popisIgraca.clear();<br />
}<br />
};</p>
<p>int main() {</p>
<p> Trener trener("marko", "markovic", "ulica 1");<br />
Klub klub("klub1", "gradkluba", trener);<br />
ClanKluba::Igrac* igrac1 = new ClanKluba::Igrac("ivan", "pavao", 123);<br />
ClanKluba::Igrac* igrac2 = new ClanKluba::Igrac("pero", "peric", 2322);</p>
<p> klub.dodajIgraca(igrac1);<br />
klub.dodajIgraca(igrac2);</p>
<p> return 0;<br />
}</p>
<p> </p>
<p>class Zaposlenik {<br />
private:<br />
string ime;<br />
string prezime;<br />
int godineRadnogStaza;</p>
<p>public:<br />
Zaposlenik(const string& ime, const string& prezime, int godineRadnogStaza); //konstruktor</p>
<p> void postaviGodineRadnogStaza(int godineRadnogStaza); // Getteri i setteri za podatke o zaposleniku<br />
int dohvatiGodineRadnogStaza() const;<br />
};</p>
<p>class Tvrtka {<br />
private:<br />
string OIB;<br />
string naziv;<br />
string adresa;<br />
vector<Zaposlenik*> zaposlenici; // Popis zaposlenika</p>
<p>public:<br />
Tvrtka(const string& OIB, const string& naziv, const string& adresa); //konstruktor</p>
<p> Tvrtka::~Tvrtka(); // Destruktor</p>
<p> Tvrtka(const Tvrtka& other); // Kopirni konstruktor</p>
<p> Tvrtka& operator=(const Tvrtka& other); // Operator pridruživanja sa dubokim kopiranjem</p>
<p> Tvrtka& operator=(Tvrtka&& other); // Operator pridruživanja sa semantikom prijenosa</p>
<p> void dodajZaposlenika(Zaposlenik* zaposlenik); // Dodavanje zaposlenika u tvrtku</p>
<p> int brojZaposlenika() const; // Dohvat broja zaposlenika u tvrtki<br />
};</p>
<p>Zaposlenik::Zaposlenik(const string& ime, const string& prezime, int godineRadnogStaza)<br />
{<br />
}</p>
<p>// B DIO ZADATKA!!! Setter za postavljanje godina radnog staža<br />
void Zaposlenik::postaviGodineRadnogStaza(int godineRadnogStaza) {<br />
if (godineRadnogStaza >= 0 && godineRadnogStaza <= 35) {<br />
this->godineRadnogStaza = godineRadnogStaza;<br />
}<br />
}</p>
<p>// Getter za dohvat godina radnog staža<br />
int Zaposlenik::dohvatiGodineRadnogStaza() const {<br />
return godineRadnogStaza;<br />
}</p>
<p>//C DIO ZADATKA</p>
<p>Tvrtka::Tvrtka(const string& OIB, const string& naziv, const string& adresa)<br />
{<br />
}</p>
<p>Tvrtka::Tvrtka(const Tvrtka& other) { // Kopirni konstruktor<br />
OIB = other.OIB;<br />
naziv = other.naziv;<br />
adresa = other.adresa;</p>
<p> for (Zaposlenik* zaposlenik : other.zaposlenici) { // Kopiranje zaposlenika<br />
zaposlenici.push_back(new Zaposlenik(*zaposlenik));<br />
}<br />
}</p>
<p>int main() { // Demonstracija kopirnog konstruktora u funkciji main:<br />
Tvrtka originalnaTvrtka("123456789", "Originalna tvrtka", "Adresa 1"); // Kreiranje originalne tvrtke</p>
<p> Zaposlenik* zaposlenik1 = new Zaposlenik("Ivan", "Ivić", 5); // Dodavanje zaposlenika u originalnu tvrtku<br />
originalnaTvrtka.dodajZaposlenika(zaposlenik1);<br />
Zaposlenik* zaposlenik2 = new Zaposlenik("Ana", "Anić", 10);<br />
originalnaTvrtka.dodajZaposlenika(zaposlenik2);</p>
<p> Tvrtka novaTvrtka = originalnaTvrtka; // Kopiranje originalne tvrtke u novu tvrtku</p>
<p> cout << "Broj zaposlenika u originalnoj tvrtki: " << originalnaTvrtka.brojZaposlenika() << endl; // Ispis broja zaposlenika u originalnoj i novoj tvrtki<br />
cout << "Broj zaposlenika u novoj tvrtki: " << novaTvrtka.brojZaposlenika() << endl;</p>
<p> return 0;<br />
}</p>
<p>//D DIO ZADATKA!!!!!!!!!!</p>
<p>Tvrtka& Tvrtka::operator=(const Tvrtka& other) { // Operator pridruživanja sa dubokim kopiranjem<br />
if (this == &other) {<br />
return *this;<br />
}</p>
<p> for (Zaposlenik* zaposlenik : zaposlenici) { // Dealociranje postojećih zaposlenika<br />
delete zaposlenik;<br />
}<br />
zaposlenici.clear();</p>
<p> OIB = other.OIB; // Kopiranje podataka iz other<br />
naziv = other.naziv;<br />
adresa = other.adresa;</p>
<p> for (Zaposlenik* zaposlenik : other.zaposlenici) { // Kopiranje zaposlenika<br />
zaposlenici.push_back(new Zaposlenik(*zaposlenik));<br />
}</p>
<p> return *this;<br />
}</p>
<p>//E DIO ZADATKAAAAAAAAAAAAAAAA</p>
<p>Tvrtka& Tvrtka::operator=(Tvrtka&& other) { // Operator pridruživanja sa semantikom prijenosa<br />
if (this == &other) {<br />
return *this;<br />
}</p>
<p> for (Zaposlenik* zaposlenik : zaposlenici) { // Dealociranje postojećih zaposlenika<br />
delete zaposlenik; // DESTRUKTORRRRRRRRRRRRR<br />
}<br />
zaposlenici.clear();</p>
<p> OIB = move(other.OIB); // Prijenos podataka iz other<br />
naziv = move(other.naziv);<br />
adresa = move(other.adresa);<br />
zaposlenici = move(other.zaposlenici);</p>
<p> return *this;<br />
}</p>