[ MixMaster @ 10.05.2005. 16:45 ] @
Dakle proble je sledeci, pri kompajliranju mi se prikazu sledece greske:
Could not find a match for 'osoba::osoba()' za trecu liniju koda u main() i
Call of nonfunction - za cetvrtu liniju koda u main() f-iji.

Sta je problem? Znam da napravim klasu koja bi zauzela prostor na steku (pristupanje je sa tackom), kada pokusam ovo, tj. zauzimanje na slobodnom skladistu sa new (koji vraca pokazivac) ne mogu da skonam sta dalje. Boli me glava, pomagajte.
Dakle hocu da mi konstruktor postavi default vrijednost, i da to bude odradjeno u main() funkciji.

Code:

#include <iostream.h>

class osoba{
        private:
            int godine;
        public:
           osoba(int);
           ~osoba() { cout<<"\nDestruktor...\n"; };

           void postaviGodine(int god) { godine = god; };
           int vratiGodine() { return godine; };
        };

osoba::osoba(int a)
        {
         godine = a;
         cout<<"\nKonstruktor...\n";
         }

void main()
     {
      int a;
      cin>>a;
      osoba *Mladen = new osoba;
      Mladen->osoba(a);     //Ovdje nesto nije dobro, kako da pristupim konstruktoru?

      cout<<"\nMladen ima "<<Mladen->vratiGodine()<<" godina.\n";

      Mladen->postaviGodine(22);

      cout<<"\nMladen ima "<<Mladen->vratiGodine()<<" godina.\n";

      delete Mladen;
      }
[ X Files @ 10.05.2005. 17:03 ] @
nemam sada vremena da istražujem detaljnije (kasnim), ali sam
primetio da kod:

Citat:

osoba *Mladen = new osoba;


nemas adgument za kreiranje objekta

treba:
Citat:

osoba *Mladen = new osoba( neki_int );

[ ljudi @ 10.05.2005. 17:15 ] @
uz moje skromno znanje pokusat cu odgovorit...

u liniji:
Code:

      osoba *Mladen = new osoba;

dinamicki alociras memoriju za objekt tipa osoba.. e tu nastaje i problem. definirao si konstruktor osoba(int), a nisi naveo parametar objektu pa pokusava pronaci konstruktor osoba() koji ne postoji.
inace razredi sami imaju podrazumjevani konstrukor osim ako ne definiras sam konstruktor. tada ces morat i sam definirati podrazumjevani konstruktor odnosno osoba().
recimo, linija:
Code:

      osoba *Mladen = new osoba(22);

bi i stimala.

druga stvar... konstruktor se poziva sam pri nastajanju objekta. nema potrebe za linijom:
Code:

      Mladen->osoba(a);


jos jedan savjet koji sam pokupio iz knjiga... konstruktor je moguce pisati i ovako:
Code:

osoba::osoba(int a) : godine(a)
{
         cout<<"\nKonstruktor...\n";
}

ako se dobro sjecam, inicijalizacijaska lista se izvrsava prije ulaska u tijelo konstruktora...
tako se u tvojem primjeru inicijalizacija obavlja 2 puta. prvi put prevoditelj sam umetne kod za inicijalizaciju pa se clanovi inicijaliziraju u inicijalizacijaskoj listi i drugi put u tijelu konstruktora.


[ MixMaster @ 10.05.2005. 17:35 ] @
OK, hvala momci. Ajde jos par pitanja.
Znam da se konstruktor poziva automatski pri kreiranju objekta, ali kako da mu proslijedim vrijednost "a", koju ja unosim prije kreiranja tog objekta?
Kada se radi sa stekom ide
Code:

osoba::osoba(a):godine(a)
                  {
                   cout<<"Konstruktor";
                   }

a u main() f-iji kada se kreira novi objekat ide
Code:
osoba Mladen(20);

jeli tako?
Ako se ne prosledjuje parametar nikakav ide
Code:
 osoba Mladen; 

Dakle, to je ok. Sada mi treba za ovaj drugi slucaj prosledjivanje parametara!?

Jos ovo. Sa
Code:

osoba *Mladen = new osoba(10);

mi u stvari govorimo, zauzmi memoriju za deset objekata velicine Mladen (tipa osoba) i vrati pokazivac? Jesam li blizu?
[ Buffy @ 10.05.2005. 21:36 ] @
Nisi blizu,jer to govori:
Zuzmi memoriju za objekat klase osoba i predaj konstruktoru vrjednost 10,tako
da ce konstruktor promjenljivoj clanici godine dati vrijednost 10.
Pozdrav!
[ X Files @ 11.05.2005. 17:02 ] @
Code:

osoba *Mladen = new osoba(10);
mi u stvari govorimo, zauzmi memoriju za deset objekata velicine Mladen (tipa osoba) i vrati pokazivac? Jesam li blizu?


Pobrkao si zagrade ;)

Code:

char *mladen = new char[10];

vraca rezervisanih 10 char-ova, kod:

Code:

char *mladen = new char(10);

vrednost *mladen je 10.


[ MixMaster @ 11.05.2005. 22:19 ] @
Znaci u tome je caka!? Odlicno. E ovakvi odgovori mi trebaju. Jos jednom se zahvaljujem svima vama!
[ manman @ 12.05.2005. 00:47 ] @
Jebi ga kad si na Marsu. ha, ha.
mala shala.
[ vlada_dj @ 19.05.2005. 15:57 ] @
Posto vidim da si pocetnik u objektno orjentisanom programiranju preporucio bih ti da obavezno prenadjes i procitas knjigu "Objektno orjentisano programiranje u jeziku C++" od Dragana Miliceva!!!
Dobro prouci tu knjigu jer je strasno dobro napisana!!!
U njoj su ti objasnjeni svi osnovni koncepti objektno orjentisanog programiranja zajedno sa jezikom C++.