Forum » Programiranje » C++ kopirni konstruktor
C++ kopirni konstruktor
Hatefild ::
class vozlisce
{
public:
vozlisce (int _vrednost, vozlisce *_next){vrednost=_vrednost,next=_next;}
~vozlisce (); //destruktor
int vrni_vrednost(){return vrednost;}
vozlisce *vrni_naslednjega(){return next;}
private:
int vrednost;
vozlisce *next;
};
class sklad
{
public:
sklad(){vrh=NULL;}
~sklad();
void push (int vrednost); //dodajanje
void pop (); //brisanje
void top (); //vrne podatek, ki je na vrhu
void izpis (); //izpise sklad
int prazen (); //preveri sklad
private:
vozlisce *vrh;
};
vozlisce::~vozlisce(){}
sklad::~sklad ()
{
while (prazen!=NULL)
{
pop();
}
}
Prosil bi ce kateri ve kako naj naredim kopirni konstruktor za sklad, saj brez njega tudi dela naloga ali brez tega kopirnega konstruktora jo nemorem zagovorit, nimam pa pojma kako ga naj naredim, prosil bi tudi malo za opis kaj sploh dela ta konstruktor
Za pametne odg. se zahvaljujem!
{
public:
vozlisce (int _vrednost, vozlisce *_next){vrednost=_vrednost,next=_next;}
~vozlisce (); //destruktor
int vrni_vrednost(){return vrednost;}
vozlisce *vrni_naslednjega(){return next;}
private:
int vrednost;
vozlisce *next;
};
class sklad
{
public:
sklad(){vrh=NULL;}
~sklad();
void push (int vrednost); //dodajanje
void pop (); //brisanje
void top (); //vrne podatek, ki je na vrhu
void izpis (); //izpise sklad
int prazen (); //preveri sklad
private:
vozlisce *vrh;
};
vozlisce::~vozlisce(){}
sklad::~sklad ()
{
while (prazen!=NULL)
{
pop();
}
}
Prosil bi ce kateri ve kako naj naredim kopirni konstruktor za sklad, saj brez njega tudi dela naloga ali brez tega kopirnega konstruktora jo nemorem zagovorit, nimam pa pojma kako ga naj naredim, prosil bi tudi malo za opis kaj sploh dela ta konstruktor
Za pametne odg. se zahvaljujem!
OwcA ::
Kopirni konstruktor se uporablja, kot že ime pove, pri kopiranju objekta. Vsakič, ko naredimo novo kopijo tega objekta, kopirni konstuktor poskrbi, da se kopija v atributih ujema z originalom. Potreba po takšnem kopiranju nastopi, ko določiš objektu novo vrednost (operator =) ali kadar ga podajaš po vrednosti.
Tole bo vredu le, če imaš vse na stacku, v kolikor uporabljaš heap se boš moral v stvar nekoliko bolj poglobiti in ali spremeniti zasnovo ali pa dodati mehanizem za samodejno smetarjenje (najvrjetneje v obliki štetja referenc).
sklad(const sklad &rhs)
{
vrh= rhs.vrh;
}
vozlisce(const vozlisce &rhs)
{
vrednsot = rhs.vrednost;
next = rhs.next;
}
Tole bo vredu le, če imaš vse na stacku, v kolikor uporabljaš heap se boš moral v stvar nekoliko bolj poglobiti in ali spremeniti zasnovo ali pa dodati mehanizem za samodejno smetarjenje (najvrjetneje v obliki štetja referenc).
Otroška radovednost - gonilo napredka.
Zgodovina sprememb…
- spremenilo: OwcA ()
Vesoljc ::
@owca
kako praviš da formatiraš kodo? (fixed)
dodal bi le še to:
s tem preprečimo t.i. self assignment
kako praviš da formatiraš kodo? (fixed)
dodal bi le še to:
vozlisce(const vozlisce &rhs) { if(&rhs != this) { vrednsot = rhs.vrednost; next = rhs.next; } }
s tem preprečimo t.i. self assignment
Abnormal behavior of abnormal brain makes me normal...
Zgodovina sprememb…
- spremenil: Vesoljc ()
OwcA ::
@Vesoljc: uporabi HTML oznako <pre>beeee</pre>
Preprečevanje self assignmenta ni potrebno, ker za to poskrbi prevajalnik (izraze tipa a=a; enostavno zanemari).
Preprečevanje self assignmenta ni potrebno, ker za to poskrbi prevajalnik (izraze tipa a=a; enostavno zanemari).
Otroška radovednost - gonilo napredka.
Vesoljc ::
tud če maš dve različni referenci?
Abnormal behavior of abnormal brain makes me normal...
OwcA ::
Kako misliš različni? Če sta obe kazalca na isto instanco, potem, ja.
Otroška radovednost - gonilo napredka.
astras ::
alo
kaj pa tole? bi prosil ce kdo ve...
torej, jes mam narejen kopirni konstruktor takole kot je spodaj, rabil bi pa narejenega tako, da mi kao ne dela vmesnega na b ampak da mi gre direkt iz sklada na kopijo sklada ce me razumete, bi mi znal kdo napisat kodo prosim?
lp
}
kaj pa tole? bi prosil ce kdo ve...
torej, jes mam narejen kopirni konstruktor takole kot je spodaj, rabil bi pa narejenega tako, da mi kao ne dela vmesnega na b ampak da mi gre direkt iz sklada na kopijo sklada ce me razumete, bi mi znal kdo napisat kodo prosim?
lp
sklad::sklad(const sklad &S) //kopirni konstruktor, ki ni vredu... { sklad b; Vozlisce *Temp = S.Vrh; while (Temp != NULL) { b.vstavi(Temp->Element); Temp = Temp->Naslednji; } Temp = b.Vrh; while (Temp != NULL) { vstavi(Temp->Element); Temp = Temp->Naslednji; }
}
***Ce bil bi vedez...... ne bil bi ...... revez***
Zgodovina sprememb…
- spremenilo: OwcA ()
Vesoljc ::
// sklad a sklad a; a.vstavi(nekaj); a.vstavi(še_nekaj); //sklad b hočemo naredit kot kopijo sklada a sklad b(a); // torej moraš vse elemente it a prenesti v b
brez bolj detajlne kode (vsaj header ) ti tešžko natančno pomagam...
sklad::sklad(const sklad& rhs) { // sprehajalec Vozlisce *temp = rhs.Vrh; while (temp != NULL) { this->vstavi(temp->Element); temp = temp->Naslednji; } }
kej tacga?
namreč, z ključno besedo this dostopaš do trenutnega objekta, v tem primeru objekta b, ki kliče svoj kopirni konstruktor sz parametrom a.
Abnormal behavior of abnormal brain makes me normal...
noraguta ::
tale tema bi bila pa skoraj lahko sticky pojavi se vsako jesen.
mogoče še v kombinaciji z par ostalimi domačimi nalogami?
mogoče še v kombinaciji z par ostalimi domačimi nalogami?
Pust' ot pobyedy k pobyedye vyedyot!
Zgodovina sprememb…
- spremenilo: noraguta ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] Iskalno drevo implementacijaOddelek: Programiranje | 2267 (1825) | eXoo |
» | [c++]SeznamOddelek: Programiranje | 2656 (2656) | Gundolf |
» | [C++ naloga] seznamOddelek: Programiranje | 1384 (1384) | BigWhale |
» | pomoc pri skladuOddelek: Programiranje | 1316 (1241) | NoUse4AName |
» | Ali mi lahko kdo prosim razlozi delovanje tega konstruktorjaOddelek: Programiranje | 1100 (885) | noraguta |