Forum » Programiranje » C++ in "prijatelji"
C++ in "prijatelji"
Srachko ::
Pozdravljeni !
Delam na tem, da bi naredil kakšen izpit iz programiranja, pa se mi je stvar ustavlja pri prijateljskih funkcijah (friend-functions). Sicer imam kar nekaj dobre literature pri roki (npr. C++ How to Programm), vendar v nobeni knjigi ta zadeva ni razložena bolj "po domače" ampak zelo strokovno.
Lepo bi prosil koga, če bi mi lahko malo bolj po domače povedal kaj o prijateljskih funkcijah (friend functions).
Za pomoč se vam že vnaprej lepo zahvaljujem.
LP
srachko
Delam na tem, da bi naredil kakšen izpit iz programiranja, pa se mi je stvar ustavlja pri prijateljskih funkcijah (friend-functions). Sicer imam kar nekaj dobre literature pri roki (npr. C++ How to Programm), vendar v nobeni knjigi ta zadeva ni razložena bolj "po domače" ampak zelo strokovno.
Lepo bi prosil koga, če bi mi lahko malo bolj po domače povedal kaj o prijateljskih funkcijah (friend functions).
Za pomoč se vam že vnaprej lepo zahvaljujem.
LP
srachko
I can see clearly now, the brain has gone...
OwcA ::
To so funkcije, ki lahko packajo tam, kjer zaradi skrivanja atributov (private in protected) naceloma ne bi smele.
Vedeti je treba le se, da relacija ni refleksivna (ce te jaz pristevam med prijatelje, to se ne pomeni, da tudi ti mene) in se ne deduje.
Vedeti je treba le se, da relacija ni refleksivna (ce te jaz pristevam med prijatelje, to se ne pomeni, da tudi ti mene) in se ne deduje.
Otroška radovednost - gonilo napredka.
Srachko ::
Prijateljse funkcije sem nekako zaštekal, tako da zdaj vem dovolj o njih. Hvala za pomoč. Sedaj pa sem naletel še na prijateljske razrede. Predvidevam, da je to skoraj isti "šmorn". Npr.: Imam dva razreda - CVozlisce in CDrevo. Spodaj je navedena implementacija obeh razredov.
// Implementacija razreda CVozlisce
class CVozlisce
{
friend class CDrevo;
protected:
CVozlisce(int Vred, CVozlisce* Oce); // Konstruktor
public:
int Vrednost;
CVozlisce* kazLSin; // Kazalec na levega sina
CVozlisce* kazDSin; // Kazalec na desnega sina
CVozlisce* kazOce; // Kazalec na očeta
};
// Implementacija razreda CDrevo
class CDrevo
{
public:
CDrevo();
CDrevo(const CDrevo &Drev);
~CDrevo();
void VstaviElement(int Elem);
void BrisiElement(int Elem);
bool JePrazno();
void IzpisiDrevo(CVozlisce* Voz);
CVozlisce* VrniKoren(){return kazKoren;};
CVozlisce* Najdi(int Elem, CVozlisce* Voz);
private:
CVozlisce* Min(CVozlisce* Voz);
CVozlisce* Max(CVozlisce* Voz);
void BrisiDrevo(CVozlisce* Voz);
CVozlisce* kazKoren;
CVozlisce* Naslednji(CVozlisce* Voz);
CVozlisce* Kopiraj(CVozlisce* Prvotni);
CVozlisce* kazOce;
};
V konkretnem primeru naj bi to pomenilo, da je razred CVozlisce "prijatelj" razreda CDrevo in lahko dostopa do njegovih atributov, ki so skriti z določilom private, vendar pa to ne velja obratno (da bi razred CDrevo dostopal do privatnih atributov razreda CDrevo). Sedaj me pa zanima, če sploh prav mislim, ali pa sem se kar fajn zmotil ?
// Implementacija razreda CVozlisce
class CVozlisce
{
friend class CDrevo;
protected:
CVozlisce(int Vred, CVozlisce* Oce); // Konstruktor
public:
int Vrednost;
CVozlisce* kazLSin; // Kazalec na levega sina
CVozlisce* kazDSin; // Kazalec na desnega sina
CVozlisce* kazOce; // Kazalec na očeta
};
// Implementacija razreda CDrevo
class CDrevo
{
public:
CDrevo();
CDrevo(const CDrevo &Drev);
~CDrevo();
void VstaviElement(int Elem);
void BrisiElement(int Elem);
bool JePrazno();
void IzpisiDrevo(CVozlisce* Voz);
CVozlisce* VrniKoren(){return kazKoren;};
CVozlisce* Najdi(int Elem, CVozlisce* Voz);
private:
CVozlisce* Min(CVozlisce* Voz);
CVozlisce* Max(CVozlisce* Voz);
void BrisiDrevo(CVozlisce* Voz);
CVozlisce* kazKoren;
CVozlisce* Naslednji(CVozlisce* Voz);
CVozlisce* Kopiraj(CVozlisce* Prvotni);
CVozlisce* kazOce;
};
V konkretnem primeru naj bi to pomenilo, da je razred CVozlisce "prijatelj" razreda CDrevo in lahko dostopa do njegovih atributov, ki so skriti z določilom private, vendar pa to ne velja obratno (da bi razred CDrevo dostopal do privatnih atributov razreda CDrevo). Sedaj me pa zanima, če sploh prav mislim, ali pa sem se kar fajn zmotil ?
I can see clearly now, the brain has gone...
Gundolf ::
Ravno obratno.
Saj ni nobene znanosti, isti šmoren kot pri funkcijah. Tisto kar določiš za friend bo imelo dostop do privatnih delov razreda.
Saj ni nobene znanosti, isti šmoren kot pri funkcijah. Tisto kar določiš za friend bo imelo dostop do privatnih delov razreda.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | "Dinamicna" sprememba razreda v C++Oddelek: Programiranje | 1935 (1327) | Spura |
» | [C++] Iskalno drevo implementacijaOddelek: Programiranje | 2311 (1869) | eXoo |
» | [C++] Linker errorOddelek: Programiranje | 1294 (1294) | Quikee |
» | [C++ naloga] seznamOddelek: Programiranje | 1396 (1396) | BigWhale |
» | pomoc pri skladuOddelek: Programiranje | 1333 (1258) | NoUse4AName |