Newsgroup: it.comp.programmare.win32
Titolo: Condividere dati tra classi

Ciao raga.
Mi sono avvicinato da poco alla programmazione ad oggetti ed ho un grosso
problema.
Quali sono le tecniche per poter accedere da una ClasseA ad oggetti
appartenenti ad
una ClasseB, magari senza dichiarare strutture dati o oggetti globali per
mantenere intatta
la struttura ad oggetti del codice?
Mi sembra di poter dire che un'esempio sono le applicazioni SDI in cui
tramite la GetDocument()
è possibile accedere dalla classe View alla Doc per poterne prelevare i
dati.
Penso quindi che queste situazioni accadano abbastanza spesso, almeno a me
succede
frequentemente.
Ciao e grazie a tutti


Per accedere ad una classe deve esisterne un'istanza in memoria, altrimenti
non è utilizzabile.
La funzione GetDocument() delle MFC restituisce un puntatore alla classe
CDocument la quale è stata creata dinamicamente all'avvio dell'applicazione,
nel caso specifico delle MFC esiste una classe globale derivata da CWinApp e
al suo interno vengono allocate tutte le classi utili a supportare
l'architettura documento vista.
Antonio.

 la struttura ad oggetti del codice?
In cosa programmi?
Se usi C++, il problema da te descritto si può risolvere con la
dichiarazione
di classi friend. Ma questo se le classi le progetti tu, ovviamente.
--
Lupino
Azzurranet IRC: @#afiad, @#fils, @#pokegalaxy - ICQ: 91528290
Mail: Remove PAN to contact me
- "It is not important what you believe, only that you believe." -

 Antonio.
Ciao Antonio,
graizie per avermi risposto.
Al di là di ciò che avviene nelle applicazioni SDI tra le classi View e Doc,
nel caso in cui abbia due classi magari da me realizzate come posso
da una accedere ai dati o oggetti definiti nell'altra?
Giuseppe

 ha scritto nel messaggio
news:oFiP9.57760$Ou4.1...@twister2.libero.it...



Ciao Dario,
apparte il costrutto friend, mi piacerebbe tanto fare come mi consigli
cioè creare una funzione di passaggio dei parametri ma mi sà che sono
ancora molto legato al vecchio C++ e con il Visual non cè verso, non
capisco.
Da una classeA tramite una sua funzione membro funA come posso accedere
ad un oggetto oggB della classeB come mi hai suggerito?
Con il vecchio C non avrei problemi, ma qui con le MFC, AppWizard e
VisualC++
non cè più il mio caro e vecchio main e ci stò a perdere la testa, ogni
classe mi sembra
un mondo a se stante in cui le funzioni membro sono attivate dai messaggi e
tra loro
non riescono a comunicare.
AIUTO

Beh, dipende da quello che vuoi fare.
class A
{
    void pippo();
};
class B
{
    A *classeA;
    void SetClass(A* OtherClass)
    {
        classeA=OtherClass;
    }
    void FaiQualcosaConA()
    {
        A->pippo();
    }
}
main()
{
    A classe1;
    B classe2;
    classe2.SetClass(&classe1);
    classe2.FaiQualcosaConA();
}
Tieni conto che AppWizzard č solo un modo per evitarti di scrivere codice,
che viene scritto per te dall'ambiente di sviluppo, ma non cambia nulla
nella logica della programmazione ad oggetti.
Dario


Per default i membri delle classi sono privati.
Ovviamente ti sei dimenticato della public:
class A
{
public:
    void pippo();
};
class B
{
    A *classeA;
public:
    void SetClass(A* OtherClass)
    {
        classeA=OtherClass;
    }
    void FaiQualcosaConA()
    {
        classeA->pippo();
    }
};
int main()
{
    A classe1;
    B classe2;
    classe2.SetClass(&classe1);
    classe2.FaiQualcosaConA();
 return 0;
}
Ciao
Maurus

 }
Ciao Maurus, e grazie
il tuo esempio č chiarissimo ma il problema č proprio questo.
In dos no problem, cč il main e quanto sopra č chiaro come il sole,
io non riesco a fare la stessa cosa in VisualC dove non cč un Main
dove poter fare entrambe le istanze classe1 e classe2 di A e B.
Sotto Win con VisualC non capisco come fare.
Puoi aiutarmi?
GIUSEPPE


A parte il fatto che tu avrai un WinMain, ma in generale le due
dichiarazioni dell'esempio di Dario:
A classe1;
B classe2;
Le puoi fare anche nello scoping globale (ovvero le fai al di fuori di
qualsiasi funzione, in cima al tuo file, proprio sotto tutti gli #include) e
stai sicuro che ti funzionera'.
Se non ti piacciono le variabili globali (come non piacciono a me) allora le
dichiari dentro una funzione dove le stai usando, e se vuoi usarle anche al
di fuori di questa funzione, te le dichiari statiche all'interno di una
classe, fornendo anche il metodo per accedere ad esse.
Cioe', voglio dire che non e' che il fatto che tu abbia un WinMain (o
l'equivalente delle MFC) al posto del main che ti possa impedire di fare le
stesse cose che facevi prima.
Maurus