[ Xarios @ 26.12.2007. 17:17 ] @
evo KODA:

SimpleCat* FunctionTwo (SimpleCat *theCat);

int main()
{
cout << "Making a cat...\n";
SimpleCat Frisky;
cout << "Calling FunctionOne...\n";
FunctionOne(Frisky);
cout << "Calling FunctionTwo...\n";
FunctionTwo(&Frisky);
return 0;
}

// functionTwo, passes by reference
SimpleCat* FunctionTwo (SimpleCat *theCat)
{
cout << "Function Two. Returning...\n";
return theCat;
}

nejasan mi je KOD koji sam podebljao (boldao), bio bih zahvalan da mi netko objasni zasto je znak pokazivaca ispred naziva funkcije, kao da je naziv funkcije pokazivac na samu klasu sto nema svrhe? i da li moze bez nejga (neka zamjena) i koja mu j etocna svrha?
[ fresh.bm @ 26.12.2007. 18:09 ] @
SimpleCat je pretpostavljam klasa,
to što si napisao znači da funkcija vraća pokazivač na klasu SimpleCat;

ovo ti je primjer prenošenja parametara funkciji putem reference, imas dosta o tome u svim relevantnim knjigama o C++;

Hm, pokušaću ti na jednostavan način objasniti,

u prvoj funkciji parametar se prenosi po vrednosti tj. u funkciji se pravi kopija onog objekta koji si prosljedio toj funkciji; u ovom slučaju to je objekat klase SimpleCat, Frisky. Sve što uradiš sa tim objektom unutar funkcije po izlazku iz funkcije se gubi.
Eh, sada. Da bi te promjene imale uticaja na izvorni objekat onda taj objekat moraš prenijeti funkciji preko reference, tj. pomoću pokazivača čime prenosiš adresu Friskya; Sve što uradiš sa njim u funkciji reflektuje se njega, jer se ne pravi nova kopija tog objekta već se radi sa stvarnim objektima;

Code:
 
#include <iostream>
using namespace std;

void f (int,int*);

main()
{
  int i=10;
  int k=10;

  cout << ”main: i:" << i << "k: " << k << endl; // prije funkcije 
  f(i,&k);
  cout << ”main: i:" << i << "k: " << k << endl; 
}
void f (int i, int *k)
{
  cout << "f: i:"<< i << " k: " << *k << endl;
  *k=20;
  cout << "f: i:"<< i << " k: " << *k << endl;
}


pogledaj ovaj primjer mozda ti bude jasnije;
[ fresh.bm @ 26.12.2007. 18:15 ] @
Code:
#include <iostream>
using namespace std;

void f (int,int&);

main()
{
  int i=10;
  int k=10;

  cout << "ain: i:" << i << "k: " << k << endl; // prije funkcije 
  f(i,k);
  cout << "main: i:" << i << "k: " << k << endl; 
}
void f (int i, int &k)
{
  cout << "f: i:"<< i << " k: " << k << endl;
  k=20;
  cout << "f: i:"<< i << " k: " << k << endl;
  
  system("pause");
}


PS. pitao si da li može na drugi način, evo to ti je ista stvar samo preko reference.
[ Sephiroth? @ 26.12.2007. 19:07 ] @
Koliko sam ja skontao covjek jednostavno pita sta znaci SimpleCat* FunctionTwo... SimpleCat* ti je vrsta return vrijednosti funkcije FunctionTwo. Kao sto mozes imati

Code:

int func()
void func()
string func()
int main()  // i main je funkcija naravno ...


zasto onda ne bi mogao imati i vrstu povratne vrijenosti SimpleCat* ? Funkcija jednostavno "vraca" pokazivac na neki objekat klase SimpleCat, koji je ili kreiran unutar te funkcije, ili samo proslijedjen iz argumenta u return, kao u tvome primjeru. Btw, ova return vrijednost se nigdje ne koristi u tvome programu
[ virtualVoid @ 26.12.2007. 19:15 ] @
A opet moze biti i da funkcija pokazuje na niz objekata klase SimpleCat, kao npr.

Code:
Klasa* a;
a=new Klasa[3]; 


Jesam li u pravu?
[ Xarios @ 27.12.2007. 13:36 ] @
Hvala svima na odgovorima! Sada mi sve jasno.
Ostalo sam sve bio razumio i znao osim ovoga: SimpleCat* FunctionTwo

Najvise me bunio asteriks * na mjestu gdje i jeste jer nisam navikao do sada da bude pored naziva funkcije nego pored naziva promjenjive(varijable). Ali naravno cilj je nauciti citav c++ pa tako da vam velika hvala za ove odgovore.