Kezdőoldal » Számítástechnika » Programozás » A friend viszony öröklődik ez...

A friend viszony öröklődik ez mit jelent? C++.

Figyelt kérdés

Tipp:

Azt jelenti,hogy ha egy barátként deklarált osztálynak a leszármazottjai megkapják azokat az adattagokat és függvényeket is amelyek valójában nem a barátosztályban lettek deklarálva?


De a publikusokat nem ugye mert egy barátosztály nem kapja meg a publikus adattagjait.

Nem tudom elmagyarázni. :(Segítsetek.


2012. nov. 9. 21:48
 1/8 A kérdező kommentje:

És egyébként gyakorlatilag mi történik amikor barát kulcsszóval deklarálok egy típust.

És mi ha globális függvénnyel.


Gondolom a függvény kap egy this mutatót.

A friend osztálynak a privát és protected adattagjai átmásolódnak a másik osztályba?

2012. nov. 9. 21:50
 2/8 iostream ***** válasza:
0%

A friend viszony NEM öröklődik.


"Azt jelenti,hogy ha egy barátként deklarált osztálynak a leszármazottjai megkapják azokat az adattagokat és függvényeket is amelyek valójában nem a barátosztályban lettek deklarálva?"


Ez a mondatot meg nem is értem.

2012. nov. 9. 21:57
Hasznos számodra ez a válasz?
 3/8 iostream ***** válasza:
28%
Ah, így már értem, mi a kavarodás oka. A friend függvény NEM kap this mutatót. Mire mutatna az a mutató? Nem, ő csak simán hozzáfér bármely A objektum privát részeihez (és az A osztály privát statikus részeihez is). Ugyanígy a friend típus is csak annyi, hogy ha ráteszi a kezét egy olyan típusra, akkor eléri a privát részeit. De ő nem kapja meg azokat.
2012. nov. 9. 21:59
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
Kösz adtam zöld kezet.
2012. nov. 9. 22:07
 5/8 A kérdező kommentje:

// main.cpp


# include <iostream>


class cProba;


class cProba {

public:

int u = 0 ;

private:

friend class cProba2 ;

short j = 2 ;

};


class cProba2 {

public:

void f(void)const { std::cout << j ; }

int h = 9 ;

private:

short o = 4 ;

};


int main() {

cProba2 x ;

x.f() ;

return 0 ;

}


A cProba2 a cProba -ban friend ként van deklarálva és mégsem tudom a publikus tagfüggvényével elérni a cProba privát és publikus adattagjait.


Akkor most hogy is van ez?

2012. nov. 9. 22:13
 6/8 A kérdező kommentje:

Nem jó:

// main.cpp


# include <iostream>


using std::cout ;


class cProba ;


class cProba {

public:

friend void printi_j(void) ;

short i_getj(void)const { return i_j ; }

protected:

private:

short i_j ;

};


void printi_j(void) { cout << i_j ; }


int main(void) {

cProba x ;

printi_j() ;

return 0 ;

}


De miért nem éri el ha friend?


Egyébként a friend függvény is a this mutatón keresztül éri el az adattagokat?


És egy helyben kifejtett friend függvény nem tagfüggvény ?

2012. nov. 9. 22:41
 7/8 A kérdező kommentje:

"Ugyanígy a friend típus is csak annyi, hogy ha ráteszi a kezét egy olyan típusra, akkor eléri a privát részeit. De ő nem kapja meg azokat."


Ha ez igaz akkor mi értelme van ennek az egésznek.

Minek kellet megírni a friendet.


Hát istenem csinálok egy nem friend függvényt át adok neki egy X típusú objektumot és ugyanúgy el fogja tudni érni az X adattagjait.


Minek egy osztályon belül deklarálni azt a globális friend függvényt.Teljesen felesleges az egész.Butaság.

2012. nov. 10. 01:10
 8/8 iostream ***** válasza:
0%
Jó, hát ha butaság, akkor az. Majd írd meg Stutternek, hogy a következő verzióból vegyék ki, mert marhaság.
2012. nov. 10. 09:18
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!