View Full Version : [C++] Già che ci sono...
bianchis78
21-05-2007, 02:01
... vi chiedo un ulteriore aiuto...
Stò facendo un progetto e mi sono imbattuto in un errore che non riesco a risolvere, forse ho sbagliato a inserire o meno delle dichiarazioni, non so...
Ho scritto due righe che simulano il mio problema, se qualcuno fosse così gentile da dirmi gli errori che ho commesso gline sarei immensamente grato..
... vi chiedo un ulteriore aiuto...
Stò facendo un progetto e mi sono imbattuto in un errore che non riesco a risolvere, forse ho sbagliato a inserire o meno delle dichiarazioni, non so...
Ho scritto due righe che simulano il mio problema, se qualcuno fosse così gentile da dirmi gli errori che ho commesso gline sarei immensamente grato..Due cose ho notato:
A)
(*MyAClass).Init();
più semplicemente:
MyAClass->Init(); ;)
B)
ClasseA::ClasseA()
{
ClasseB *BClass = new ClasseB();
}Così la istanza di ClasseB la assegni ad una variabile locale (che quindi lì nel costruttore non serve a nulla) invece che alla variabile di istanza private BClass dichiarata nella ClasseA.
bianchis78
21-05-2007, 10:07
Ok per il primo errore...
cmq una curiosità l'operatore -> e l'operatore . non sono intercambiabili?
per il secondo.. ho scritto cosi perchè come variabile nel private avevo messo il puntatote ClasseB *ClassB; è sbagliato? come avrei dovuto fare ?
Ok per il primo errore...
cmq una curiosità l'operatore -> e l'operatore . non sono intercambiabili?Beh, non è un errore. Il '.' lo si usa quando si accede ad una classe/struttura/union senza passare per un puntatore, il '->' lo si usa per la stessa cosa ma quando si ha un puntatore.
Difatti MyAClass->Init() fa la stessa identica cosa che (*MyAClass).Init(). Avendo un puntatore lo si deve dereferenziare, con -> lo fa già lui, altrimenti lo devi fare tu con (*MyAClass). Ma il succo non cambia.
per il secondo.. ho scritto cosi perchè come variabile nel private avevo messo il puntatote ClasseB *ClassB; è sbagliato? come avrei dovuto fare ?Appunto:
ClasseA::ClasseA()
{
BClass = new ClasseB(); // assegno a BClass, che è il membro private
}Come hai fatto tu assegni il puntatore alla istanza ad una variabile locale nel costruttore. Appena il costruttore termina il puntatore è "perso".
bianchis78
21-05-2007, 10:26
Scusa ma sono proprio fuori...
Allora se quando viene istanziata una classe A che si appoggia ad una istanza della classe B, come faccio a tenere un riferimento per quando chiamo i vari metodi della classe A, per dirgli che devono usare l'istanza di B che ho creato? scusa ma come avrai capito sono ancora alle prime armi...
Scusa ma sono proprio fuori...
Allora se quando viene istanziata una classe A che si appoggia ad una istanza della classe B, come faccio a tenere un riferimento per quando chiamo i vari metodi della classe A, per dirgli che devono usare l'istanza di B che ho creato? scusa ma come avrai capito sono ancora alle prime armi...Ma nella ClasseA hai messo un membro private ClasseB *BClass. Nel costruttore inizializzi quel membro come ho appena detto prima. A quel punto le altre funzioni membro possono usare tranquillamente BClass.
bianchis78
21-05-2007, 11:21
Ok adesso ci sono.
Scusa se te l'ho fatto ripetere due volte, ma sto un pò fuso in questi giorni.
Grazie 1000 di nuovo!!
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.