Newsgroup: it.comp.lang.c++
Titolo: Info su this

Il questione e` questa: ho due classi (diciamo A e B)
ad un certo punto la classe A crea un istanza della B passando al
costruttore "this"; utilizzando questo puntatore la classe B potra`
accedere ai metodi di A?
c'e` qualche controindicazione o qualche accorgimento particolare di cui
tenere conto?
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
Il piu' bel momento dell'amore e' quando ci si illude che duri
per sempre; il piu' brutto, quando ci si accorge che dura
da troppo.

 tenere conto?
Nessuno in particolare. Si usa come qualsiasi altro oggetto.
Ciao
Domenico Barra

 Nessuno in particolare. Si usa come qualsiasi altro oggetto.
scusa se mi intrometto
che tipo di dato deve ricevere il costruttore? deve essere per forza un tipo
class B? o c'č un tipo generico per le classi?
--
ciao
XAERO [*]
"Se vuoi renderti conto del valore del
denaro, prova a chiedere un prestito"
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCA/CM/CS/CC/E/O d?(-) s+:-- a--->? C++++(+)$@ UL-(--) P>++ L+() E-- W+++$@
N++@ o-- K- w+++(++++)@ O--- M V? PS+++ PE-(--) Y? PGP>++ t? 5? X+ R- tv-
b+(++) DI? D++ G- e !h !r y?
------END GEEK CODE BLOCK------

 tenere conto?
C'è un elemento da tenere ben presente.
Se l'oggetto B viene creato nel corpo del costruttore di A, questo oggetto
riceverà un puntatore (this) a un oggetto il cui costruttore non è ancora
uscito. Se l'oggetto B decide di invocare immediatamente (nel suo
costruttore, cioè) dei metodi di A, l'oggetto A verrà utilizzato prima che
la sua costruzione sia effettivamente terminata.
Max

 class B? o c'č un tipo generico per le classi?
Uhm... non credo di aver capito la tua domanda. Potresti farmi un esempio?
Ad ogni modo, non c'e' un tipo "generico" per le classi.
class Class2;
class Class1
{
  public:
   Class1() { Class2 myc2(this);}
};
class Class2
{
  public:
   Class2(Class1 *); //da qui posso accedere ai membri pubblici di Class1
tramite il puntatore passato
};
Credo che il caso fosse questo. Il costruttore riceve un tipo di dato
(Class1 *). Era questo che volevi sapere?
Ciao
Domenico Barra

 (Class1 *). Era questo che volevi sapere?
si, era questo.
e come funziona con classi derivate?
io ho una classe COggettoGenerico.
ho altre classi, tutte derivate da COggettoGenerico
se devo passare il puntatore this ad una funzione o un membro, c'č un modo
per poter passare tutti i tipi di classi derivate che ho (per es. il tipo č
COggettoGenerico*, ma vorrei passare il punt. this di una classe drivata da
COggettoGenerico)? oppure ho detto l'ennesima cretinata?


 COggettoGenerico)? oppure ho detto l'ennesima cretinata?
Ancora una volta non so se ho capito... ci provo...
Dunque, hai una classe Base, da cui derivano altre classi, e vuoi passare
"tutti i tipi di classi derivate" ad una funzione unica. L'unico modo
"corretto" per passare "tutti i tipi di classi derivate" e' passare il
puntatore alla base. Se poi all'interno della funzione vuoi sapere qualcosa
in piu' sul tipo, ti conviene ricorrere al casting dinamico o a typeinfo
(insomma, all'RTTI). Credo che pero' questo metodo sia da limitare ai casi
di assoluta indispensabilita'.
Ciao
Domenico Barra

 C'e` un elemento da tenere ben presente.
[cut]
ok, ma nel mio caso il problema non si pone
grazie a tutti
Kronos
-- 
Home: 
http://kronoz.tsx.org
"Chi parla in tono cortese,
 ma continua a prepararsi,
 potra' andare avanti;
 chi parla in tono bellicoso
 e avanza rapidamente
 dovra' ritirarsi" Sun Tzu -- L'arte della guerra