Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Evo malo za razmisljat ... slobodno dajte prijedloge

[es] :: C/C++ programiranje :: C/C++ za početnike :: Evo malo za razmisljat ... slobodno dajte prijedloge

[ Pregleda: 3742 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Xarios

Član broj: 127199
Poruke: 118
*.tel.net.ba.



+1 Profil

icon Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 16:16 - pre 198 meseci
Sta mislite dal je dobar kod, ima li skrivenih bagova?

Cilj je bio inicijalizovat objekt pa predat po referenci funkciji RacGodina() pomocu pokazivaca, a da ta funkcija vraca pokazivac na objekat same klase.

A u samoj funkciji da se izvrsi operacija i promjena vrijednosti objekta.

Evo KODA:

#include <iostream.h>

class AUTO
{
public:
AUTO(unsigned int god){dob=god;}
~AUTO(){}
int GetDob() const {return dob;}
void SetDob(int age) {dob=age;}
private:
int dob;
};

AUTO* RacGodina(AUTO *pGodina);
int main()
{
AUTO Golf(1985);

cout <<"Prije fun RacGodina: "<<Golf.GetDob()<<endl;
cout <<"Adresa Golf prije poziva funkcije: "<<&Golf<<endl<<endl;
RacGodina(&Golf);
cout <<"Adresa Golf poslije poziva funkcije: "<<&Golf<<endl;
cout <<"Poslije fun RacGodina: "<<Golf.GetDob()<<endl;

return 0;
}

AUTO* RacGodina(AUTO *pGodina)
{
int tekGod = 2007, var, rez;
var = pGodina->GetDob();
rez = tekGod - var;
*pGodina = rez;
cout <<"u RacGodina(), pGodina: "<<pGodina->GetDob()<<endl<<endl;
*pGodina;
return pGodina;
}

Slobodno dajte prijedloge...

PS: KOD se prevodi i izvrsava bez problema u Borland C++ 4.5.
 
Odgovor na temu

Xarios

Član broj: 127199
Poruke: 118
*.tel.net.ba.



+1 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 16:18 - pre 198 meseci
A evo mozda bolje verzije, recite i vi dal je bolja od gore navedene:

#include <iostream.h>

class AUTO
{
public:
AUTO(unsigned int god){dob=god;}
~AUTO(){}
int GetDob() const {return dob;}
int SetDob(int age) {dob=age; return dob;}
private:
int dob;
};

AUTO* RacGodina(AUTO *pGodina);
int main()
{
AUTO Golf(1985);

cout <<"Prije fun RacGodina: "<<Golf.GetDob()<<endl;
cout <<"Adresa Golf prije poziva funkcije: "<<&Golf<<endl<<endl;
RacGodina(&Golf);
cout <<"Adresa Golf poslije poziva funkcije: "<<&Golf<<endl;
cout <<"Poslije fun RacGodina: "<<Golf.GetDob()<<endl;

return 0;
}

AUTO* RacGodina(AUTO *pGodina)
{
int tekGod = 2007, var, rez;
var = pGodina->GetDob();
rez = tekGod - var;
cout <<"u RacGodina(), pGodina: "<<pGodina->SetDob(rez);
return pGodina;
}
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
195.252.105.*



+7 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 17:00 - pre 198 meseci
Evo , ja sam ispravio par redova ...
Vidi ovaj kod http://www.elitesecurity.org/t290314-0#1740518 Tu imas dosta materjala o vracanju ptr na objekte.
Pozdrav
Code:

#include <iostream.h>

class AUTO
{
public:
    AUTO(unsigned int godiste)
    {
        dob=godiste;
    }
    ~AUTO()
    {}
    unsigned int GetDob() const
    {
        return dob;
    }
    unsigned int SetDob(int godiste)
    {
        dob=godiste;
        return dob;
    }
private:
    unsigned int dob;
};

AUTO* RacGodina(AUTO *pGodina);

int main()
{
//    AUTO Golf(1985);
    AUTO *Golf = new AUTO(1985);    // Ako vec proveravas pointer konstruisi objekat ovako
    cout << "Prije fun RacGodina: " << Golf->GetDob() <<endl;
    cout << "Adresa Golf prije poziva funkcije: "<< Golf << endl << endl;
    Golf = RacGodina(Golf);                 // I ovo da bude interesantnije
    cout << "Adresa Golf poslije poziva funkcije: " << Golf << endl;
    cout << "Poslije fun RacGodina: "<< Golf->GetDob() << endl;
    return 0;
}

AUTO* RacGodina(AUTO *pGodina)
{
    int tekGod = 2007, var, razlika;
    var =(int) pGodina->GetDob();
    razlika = tekGod - var;
    cout << "u RacGodina(), pGodina: " << pGodina->SetDob(razlika) << endl;
    return pGodina;
}


 
Odgovor na temu

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
*.bi2.dlp327.bih.net.ba.



Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 17:02 - pre 198 meseci
Gledaj, ok je ako imas neki problem da se rijesi, ali nije nikome do “razmisljanja” na ovako banalnim primjerima, no offense… Za pomoc ako nesto ne znas, ili imas nesto zanimljivo, ok ali ipak ^^ Sta ti je ovdje problem?

Prvo, stavi kod izmedju tagova predvidjenih za to, a ne ovako. Koristi

Code:


 moj kod



Nacin pisanja koda, te imenovanje varijabli i funkcija ti je los. Kako bi ja trebao znati sta ti je dob u tvojoj klasi, u tvom primjeru dob je godina (?) i age (?) i ko zna sta jos ne… Kako ti dob u jednom moze predstavljati godiste, pa onda starost automobila? Sve varijable nazivas sa prosjecno 3 slova. Zar je tesko staviti god umjesto godiste? RacGodina(), ova funkcija koliko vidim racuna starost automobila. Prvo, zasto nije metoda unutar klase? Drugo, zasto ima povratnu vrijednost Auto* kad se nizasta ne koristi, niti ima puno smisla da se ikako i koristi, jer proslijedjujes Auto po referenci. Pretpostavljam da radis s pointerima unutar funkcije radi ucenja, to je ok, iako potpuno nepotrebno. Preko naziva ove funkcije se niti izbliza ne da naslutiti za sta sluzi…

Evo izmjenjenog programa koji radi istu namjenu:

Code:


#include <iostream>
using namespace std;

#include <iostream>
using namespace std;

class Auto
{
 int godiste;
 
   public:
 Auto(unsigned int newGodiste) { godiste = newGodiste; }
 ~Auto() {}
 
 int getGodiste() const { return godiste; }
 void setGodiste(int newGodiste) { godiste = newGodiste; }
 
 int starost() const;
};


int Auto::starost() const
 {
  int tekucaGodina = 2007;
  cout << "U metodi starost(), godiste: " << godiste << endl;  
  return (tekucaGodina - godiste);
 }


int main(void)
{
 Auto Golf(1985);
 
 cout << "Starost automobila Golf: " <<  Golf.starost() << endl;
 
 system("pause");
 return EXIT_SUCCESS;
}



Naravno, pretpostavljam da si se samo igrao sa pokazivacima da vidis kako to radi, pa si prosljedjivao objekat funkciji.

Evo tvoga orginalnog koda ucinjenog “malo” citljivijim:

Code:


#include <iostream>
using namespace std;

class Auto
{
 int godiste;
 
   public:
 Auto(unsigned int newGodiste) { godiste = newGodiste; }
 ~Auto() {}
 
 int getGodiste() const { return godiste; }
 void setGodiste(int newGodiste) { godiste = newGodiste; }
};


Auto* starost(Auto *p_Auto);


int main(void)
{
 Auto Golf(1985);

 cout << "Prije funkcije starost: " << Golf.getGodiste() << endl;
 cout << "Adresa Golf prije poziva funkcije: " << &Golf << endl << endl;
 
 starost(&Golf);
 
 cout << "Adresa Golf poslije poziva funkcije: " << &Golf << endl;
 cout << "Prije funkcije starost: " << Golf.getGodiste() << endl;
 
 system("pause");
 return EXIT_SUCCESS;
}



Auto* starost(Auto *p_Auto)
 {
  int tekGod = 2007;
  int rez = (tekGod - p_Auto->getGodiste());
  
  *p_Auto = rez;
  cout << "u starost(), p_Auto: " << p_Auto->getGodiste() << endl << endl;
  
  //*p_Auto;  zasto ce ti ova linija koda???
  
  return p_Auto;  
 }



Ja bih licno p_Auto varijablu nazvao cisto *automobil, ali posto si ti u ovoj funkciji stavio pGodiste, pretpostavljam da sa p obiljezavas pointer. Dobra praksa u nekim slucajevima, ali u ovako kratkoj funkciji samo otezavas citljivost.
I da, zasto nisi Auto Golf deklarisao dinamicki, preko new?
Pozdrav!
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
195.252.105.*



+7 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 17:11 - pre 198 meseci
Citat:
Sephiroth?: Gledaj, ok je ako imas neki problem da se rijesi, ali nije nikome do “razmisljanja” na ovako banalnim primjerima, no offense… Za pomoc ako nesto ne znas, ili imas nesto zanimljivo, ok ali ipak ^^ Sta ti je ovdje problem?

Ja nisam hteo da budem ovako surovo iskren ali stvarno, program radi (doduse ne nesto narocito mnogo )
Veovatno si hteo da proveris svoje znanje prema komentarima ostalih ... pa ok je osim imenovanja promenljivih (ja nisam hteo nesto mnogo tu da menjam)
Pozdrav
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 17:16 - pre 198 meseci
Tvoj kod je generalno pogrešan i predugačak.

Na osnovu zahteva iznetih u tvojoj oruci ovo bi bio ispravan kod:

Code:

struct AUTO {
  explicit AUTO(int god) : dob(god) {}
  ~AUTO(void) {}
  int GetDob() const {return dob;}
  void SetDob(int age) {dob=age;}
private:
  int dob;  
};


AUTO *RacGodina(AUTO &obj) {
  obj.SetDob(2007 - obj.GetDob());
  return &obj;
}



Tko leti vrijedi
 
Odgovor na temu

Xarios

Član broj: 127199
Poruke: 118
*.tel.net.ba.



+1 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 17:43 - pre 198 meseci
Hvala svima, a posebno Eurora3D Team-u jer je pogodio sta mi je bio cilj.

I Sephiroth je upravu kad kaze da je bezveze imemonano i nije se vodila paznja o pravilima estetike dizajna samog koda po vec ustaljenim pravilima medju iskusnijim programerima. Ali mislim da nisam promasio mjesto na forumu jer se ova sekcija zove C++ za pocetnike.

Naravno dobra je ideja kreirat objekat na gomili tako da ne optereciva stek ili registar (zavisno o racunaru), no ovo je bilo marginalni primjer koji nije bio za cilj postici expertnu citljivost.

Ali svacam profesionalnu deformaciju experata, pa se izvinjavam ako sam vas iznervirao!

PS: idem na fax, ali na mom faxu bas ne vole razmisljat i ucit se kroz medjusobnu izradu primjera (prakticno) nego se vecinom samo raspitivaju na formumu kad ce ispit, tko je prosao, koji su ispit. zadaci, negativne kritike , itd....
ZALOSNO.

pozdrav!
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
195.252.105.*



+7 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 17:56 - pre 198 meseci
Savet , ubuduce da nebi nervirao profi programere na forumu napravi neku gresku u kodu
Pozdrav
 
Odgovor na temu

Xarios

Član broj: 127199
Poruke: 118
*.tel.net.ba.



+1 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 18:19 - pre 198 meseci
HA,HA, bas cool savjet. Thanks.

To valjda ne vole kad nije dobar stil a radi?!

Zaboravio sam posebno zahvalit i kiklop74, jer je stvarno reduciran kod i praktican za upotrebu u nekoj aplikaciji.

pozdrav.
 
Odgovor na temu

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
*.bi2.dlp45.bih.net.ba.



Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 18:39 - pre 198 meseci
E, sada nesto samo od mene. Ja sebe smatram pocetnikom, ni izdaleka profi programerom... Sto se tice kritike, ja stojim iza svake svoje rijeci. Drago mi je da znas primiti kritiku, ali ruku na srce, ko god ti kaze da je tvoj kod uredu ne pomaze ti. Netko ipak treba reci sta ne valja. I jos nesto, nemoj se nikome izvinjavati, i niposto se nikad nervirati radi stvari koje su ti upucene, to je samo kritika!

Citat:

PS: idem na fax, ali na mom faxu bas ne vole razmisljat i ucit se kroz medjusobnu izradu primjera (prakticno) nego se vecinom samo raspitivaju na formumu kad ce ispit, tko je prosao, koji su ispit. zadaci, negativne kritike , itd....
ZALOSNO.


Ovo sto si naveo pogotovo cijenim... Samo nastavi stopama ucenja! Ako te brine situacija na fax-u, ne brini, uvijek ima gore, nemoj da ti pricam o tome ;(

P.S. malo offtopic, ali preporuka za citanje: The Humble Programmer by Edsger W. Dijkstra

P.P.S osjecaj se slobodno da ponovo pitas bilo sta jos, ali pokusaj dati neki zaista problem, ili nesto slozenije ako zelis da te netko uputi... Pozdrav

[Ovu poruku je menjao Sephiroth? dana 28.12.2007. u 19:53 GMT+1]
 
Odgovor na temu

Xarios

Član broj: 127199
Poruke: 118
*.tel.net.ba.



+1 Profil

icon Re: Evo malo za razmisljat ... slobodno dajte prijedloge28.12.2007. u 21:16 - pre 198 meseci
Naravno, ako hocemo da naucimo i postanemo bolji programeri trebamo biti flexbilni i gledat pozitivno na kritike koje imaju smisla.
Tako da je kod mene dobrodosla kritika ako je netko daje dobronamjerno. Ne volim bezpotrebna nadmudrivanja i prepiranja.

Hvala Sephiroth? za upute.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Evo malo za razmisljat ... slobodno dajte prijedloge

[ Pregleda: 3742 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.