» »

prenos kazalcev po referenci

prenos kazalcev po referenci

Mediator ::

Zakaj je dober prenos kazalcev po referenci?Spodaj imam primer brisanja elementa iz drevesa..
Zakaj nebi šlo namesto void Drevo::brisi(int st,Vozlisce *&k) --> void Drevo::brisi(int st,Vozlisce *k)
itd.. sm sprobal in videl, da tako res ne dela, vendar zakaj?


void Drevo::brisi(int st,Vozlisce *&k)
{

//drevo ne obstaja
if (k==NULL)
return;

if (st< k->get_podatek())
brisi(st,k->get_levi());
else
if (st> k->get_podatek())
brisi(st,k->get_desni());

else
{
//list
if (!k->get_levi() && !k->get_desni())
{
delete k;
k = NULL;
}

//levi ne obstaja
else if (!k->get_levi())
{
Vozlisce *tmp = k;
k = k->get_desni();
tmp->spr_desni(NULL);
delete tmp;
}

//desni ne obstaja
else if (!k->get_desni())
{
Vozlisce *tmp = k;
k = k->get_levi();
tmp->spr_levi(NULL);
delete tmp;
}
//obstaja levi in desni sin
else
brisiX(k->get_levi(), k);

}
}


void Drevo::brisiX(Vozlisce *&k, Vozlisce *brisano)
{
if (k->get_desni())
brisiX(k->get_desni(),brisano);

else
{
brisano->set_podatek(k->get_podatek());
Vozlisce *tmp = k;
k = k->get_levi();
tmp->spr_levi(NULL);
delete tmp;
}
}

3p ::

Ja, z referenco na kazalec lahko kazalec spremeniš in spremenjeno vrednost vrneš iz podprograma... Sicer se mi zdi, da zapisani rutini ne vračata nič uporabnega....

Mediator ::

zakaj pa tole:

podatek*& get_levi(){return levi_sin;};
podatek*& get_desni(){return desni_sin;};

vračanje funkcij po referenci?Zakaj pa je to dobro?

3p ::

To ni vračanje funkcij po referenci, ampak vrneš referenco na kazalec.
(Če nisem kaj zabiksal) ti ti dve funkciji vrneta referenco na kazalec znotraj vozlišča. Razlika od tega, da bi vrnil navaden kazelec je v tem, da če ta kazalec zdaj spremeniš, si dejansko spremenil vsebino vozlišča (ki vsebuje oba kazalca).

Gundolf ::

O referenci moraš razmišljat enako kot o kazalcu. Referenca je kazalec. Le da ti C++ prikrije to v sintaxi, tako jo uporabljaš kot navadno spremenljivko. Torej referenca na kazalec je kazalec na kazalec. Zakaj je pa ta dober? No, en primer uporabe maš že v funkciji main.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Iskalno Drevo

Oddelek: Programiranje
132069 (1635) Ciklamen
»

[C++] Enosmerno povezan seznam

Oddelek: Programiranje
113543 (1725) lebdim
»

[C++] Iskalno drevo implementacija

Oddelek: Programiranje
52274 (1832) eXoo
»

[c++]Seznam

Oddelek: Programiranje
142658 (2658) Gundolf
»

pomoc pri skladu

Oddelek: Programiranje
51319 (1244) NoUse4AName

Več podobnih tem