enks

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