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!