Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 3.892 pregleda

Najnovija ↓

Kako pristupiti konstruktoru?!? 10.05.2005. u 17:45 · pre 261 mesec #1
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;
      }
Potpis
Vidi bako, DžEDAJ!
Re: Kako pristupiti konstruktoru?!? 10.05.2005. u 18:03 · pre 261 mesec #2
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 );

Re: Kako pristupiti konstruktoru?!? 10.05.2005. u 18:15 · pre 261 mesec #3
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.


Re: Kako pristupiti konstruktoru?!? 10.05.2005. u 18:35 · pre 261 mesec #4
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?
Potpis
Vidi bako, DžEDAJ!
Re: Kako pristupiti konstruktoru?!? 10.05.2005. u 22:36 · pre 261 mesec #5
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!
Potpis
[email protected]
Re: Kako pristupiti konstruktoru?!? 11.05.2005. u 18:02 · pre 261 mesec #6
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.


Re: Kako pristupiti konstruktoru?!? 11.05.2005. u 23:19 · pre 261 mesec #7
Znaci u tome je caka!? Odlicno. E ovakvi odgovori mi trebaju. Jos jednom se zahvaljujem svima vama!
Potpis
Vidi bako, DžEDAJ!
Re: Kako pristupiti konstruktoru?!? 19.05.2005. u 16:57 · pre 261 mesec #9
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++.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme