Objekat iz jedne funkcije u drugu funkciju

Objekat iz jedne funkcije u drugu funkciju

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

Imam u programu klasu drzava i funkciju koja sluzi da korisnik unese prvo da li želi da regrutuje vojnika/zaposli radnika i da unese broj ljudi. Ta funkcija nakon toga treba da izračuna ukupnu cenu hrane koju korisnik treba da izdvoji za kupovinu i ako je korisnik ima da poveća broj radnika/vojnika i smanji broj hrane.

int dodajLjude() {     int vojnik, radnik, tip, broj;     cout << "Ukucajte 1 (za radnika) ili 2 (za vojnika) i broj njih koliko zelite da zaposlite/regrutujete." << endl;     cout << "Tip (1 ili 2): ";     cin >> tip;     cout << endl;     cout << "Broj: ";     cin >> broj;     cout << endl;     // cena radnika i vojnika     int cenaR = broj * 35;     int cenaV = broj * 50;     // cena radnika i vojnika     if (tip == 1) {        if (cenaR > drzava1.hrana) {           cout << "Ne mozete da zaposlite jos radnika! Razlog: Nemate dovoljno hrane." << endl;        }        else{           cout << "Uspesno ste zaposlili " << broj << " radnika!" << endl;           drzava1.hrana -= cenaR;           drzava1.radnika += broj;        }     else if (tip == 2) {        if (cenaV > drzava1.hrana) {           cout << "Ne mozete da zaposlite jos vojnika! Razlog: Nemate dovoljno hrane." << endl;        }        else{           cout << "Uspesno ste zaposlili " << broj << " vojnika!" << endl;           drzava1.hrana -= cenaV;           drzava1.vojnika += broj;        }     } } }

E sad, ta funkcija ide pre main() funkcije kada još nije učitana drzava1. Da li postoji još neko dobro rešenje sem da funkciju dodajLjude() stavim u funkciju main(), to jest parametre iz drzava1 koristim pre?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14249
  • Gde živiš: Niš

Napisano: 18 Nov 2013 21:13

A što ta funkcija ne bi postala funkcija članica klase država? Ovako su ti sve promenljive lokalne i postoje samo za vreme izvršenja funkcije.

Dopuna: 18 Nov 2013 21:18

Takođe, funkcija može biti i prijateljska funkcija klasi država čime će joj biti dozvoljen pristup svim privatnim promenljivima klase država.

Dopuna: 18 Nov 2013 21:19

Elem, piše da funkcija ima celobrojnu povratnu vrednost, a funkcija nigde ne vraća vrednost. Ako već ne vraća vrednost, onda neka bude void.



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

Napisano: 18 Nov 2013 21:29

Upravo do te lekcije sam stigao ; Prijateljske klase. Dakle, to bi bilo nešto ovako:

#include <iostream> #include <cmath> #include <ctime> #include <string> drzava1 drzava; class drzava {   private:    int hrana, radnika, vojnika (...);    friend int dodajlLjude(); };

Jel' tako?

Dopuna: 18 Nov 2013 21:32

vasa.93 ::Elem, piše da funkcija ima celobrojnu povratnu vrednost, a funkcija nigde ne vraća vrednost. Ako već ne vraća vrednost, onda neka bude void.

Da, primetio sam da u debageru upozorava na to. To sam planirao da rešim kasnije vraćajući neke vrednosti koje su potrebne u igri. Negde sam ovde pročitao da nije preporučljivo koristiti void, pokušaću sutra da nađem taj link (mislim da je morando nešto spomenuo oko toga).

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14249
  • Gde živiš: Niš

E.L.I.T.E. ::Upravo do te lekcije sam stigao ; Prijateljske klase. Dakle, to bi bilo nešto ovako:
...
Jel' tako?
Da. Funkciju kasnije možeš da definišeš bilo gde.
No, bolje bi bilo da funkciju definišeš kao funkciju članicu klase jer bi, ukoliko bi funkcija bila prijateljska, prilikom poziva funkcije morao jedan od parametara da bude objekat nad kojim želiš da izvršiš funkciju. Kada bi funkciju definisao kao članicu klase ne bi morao da imaš parametre.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

Izvini sad što te smaram, ali da li je to vezano za nasleđivanje?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14249
  • Gde živiš: Niš

Šta to?

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

vasa.93 ::No, bolje bi bilo da funkciju definišeš kao funkciju članicu klase jer bi, ukoliko bi funkcija bila prijateljska, prilikom poziva funkcije morao jedan od parametara da bude objekat nad kojim želiš da izvršiš funkciju. Kada bi funkciju definisao kao članicu klase ne bi morao da imaš parametre.

To o čemu si pričao Smile

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14249
  • Gde živiš: Niš

Napisano: 18 Nov 2013 22:14

Nije posredno vezano za nasleđivanje, i definitvno ne u kontekstu u kome govorim.
Prijateljske funkcije se ne nasleđuju, funkcije članice se nasleđuju, pa recimo odatle možeš da izvučeš neku vezu.

Sve u svemu, ako funkciju ne koristiš van klase (objekta), onda je svakako bolje definisati je kao funkciju članicu. Em ti je lakši zapis, em nemaš dodatne parametre, em je nasledna. Very Happy

Dopuna: 18 Nov 2013 22:15

Em ja klasa potpunija. Very Happy

Ko je trenutno na forumu
 

Ukupno su 946 korisnika na forumu :: 72 registrovanih, 6 sakrivenih i 868 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 2413 - dana 03 Okt 2019 05:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Alojz Hauptman, amir3045, amstel2, balkan1, Bane san, bankulen, bato3, bojcistv, Boris902, bulovic, calvi, cavatina, Cufo, Cvijo_ue, darcaud, Dostanic09, dule10savic, Dusko Nikolin, Filodendron, Fog of War, Futurama, Georgius, goran.vvv, Groucho, husky, ILGromovnik, Jester, kaptain, krkalon, Kubovac, Levi, ljuba sd, Lošmi, ltcolonel, Marko Marković, MB120mm, Milan A. Nikolic, MilosKop, Mixelotti, N.e.m.a.nj.a., nebojsag, ofbeyond, ostoja2, panticstefan53, pein, PrintZip, proka89, Rakenica, renoje2, Revolucion, rodoljub2, ruseskij, sasa.zoric, sekretar2, shaja1, Sirius, SKORPION, Srki94, stefanmpurtic, tanakadzo, tokivoki01, Toni, vargas2, VJ, Vlada1389, vladas87, vlvl, voja64, White Knight, wolf431, zexoni, zixmix