Newsgroup: it.comp.lang.c++
Titolo: Gerarchia di classi friend

Salve a tutti:
vi pongo il mio problema:
class PIPPO
{ friend class BASE;
  ...
}
In questo modo dichiaro friend la classe BASE, ma come posso fare per dirgli
che anche tutte le classi derivate di BASE sono friend? In questo modo il
compilatore mi dą errore se una derivata di BASE tenta di accedere a membri
privati di PIPPO.
Grazie a tutti
Giovanni.

...

Elencandole una per una. L'uso eccesivo di friend denota errori di disegno.
Ciao,
Nicola

 che anche tutte le classi derivate di BASE sono friend?
Non si puo', e a ben ragione!
Devi dichiarare esplicitamente all'interno di una classe TUTTE le classi
friend.
Se A e' friend di B e B e' friend di C, questo NON implica che A sia
friend di B!! (e difatti non lo e')
Il fatto di cio' e' che probabilmente si andrebbe a dotare della classe
A delle funzioni - potenzialmente dannose e che non si vogliono rendere
"pubbliche" - di C.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 L'uso eccesivo di friend denota errori di disegno.
Oppure troppe richieste di modifiche nel corso dello sviluppo del
codice.
Saluti
-- 
alef

"Nicola Musatti" <Nicola....@ObjectWay.it> ha scritto nel messaggio
news:a327cf48.04092...@posting.google.com...

In realtą non č che ci sono errori di disegno...a me semplicemente serviva
dire che tutte le classi derivate di BASE sono friend (classi che potrebbero
ancora non esistere).
Grazie
Giovanni.

 codice.
Allora ti conviene prendere e riscrivere tutto il codice che magari
viene meglio a 'sto punto!


 viene meglio a 'sto punto!
Se lo permettessero, magari.
Saluti
-- 
alef

 viene meglio a 'sto punto!
riscrevere tutto il codice non mi sembra una scelta sempre fattibile... 
se è un'applicazione di 100 KLOC la riscrivi tutta?
-- 
There are better things in life than alcohol, but alcohol makes up for 
not having them. - Terry Pratchett.

eeee... ma che pignoli che siete! era solo un eufemismo..


...

No. Piuttosto questo e' il fattore che rende evidenti le carenze del disegno.
Ciao,
Nicola

 ancora non esistere).
Appunto, che senso ha?
Ciao,
Nicola


Ha senso se ad esempio un giorno il programmatore di una nuova classe,
derivata, e quindi facente parte della famiglia classe BASE, dovrà accedere
ai membri privati della mia classe.
Nel mio specifico caso (stavo scrivendo un giochino), ho una classe che è il
motore di un gioco e un'altra classe che è il motore grafico.
Visto che di motori grafici se ne possono fare diversi, avevo pensato di
creare una classe base "motore grafico" che non faceva nulla ed era
dichiarata friend.
Gli altri programmatori che avrebbero voluto sviluppare successivi motori
grafici per il gioco avrebbero dovuto ereditare la classe base del motore
grafico per accedere ai membri privati del motore di gioco.
Pensavo si potesse fare, e invece no!
Pazienza...!
Cmq sia non penso sia una cosa inutile!
Grazie
Giovanni.

 dichiarata friend.
Se le due classi devono interagire la strada giusta non e' la
dichiarazione friend, ma la realizzazione di un'interfaccia pubblica
adeguata.
Ciao,
Nicola


Non posso rendere pubbliche le strutture di gioco, tantomeno non posso
fornire il loro stato tramite copie o altro perchè rallenterebbe il
tutto...ecco perchè ho dovuto dichiarare friend il motore grafico. Ovvio, è
una soluzione non molto elegante, ma è l'unica che il C++ permette.
Ciao
Giovanni.