Corso di Visual C++

Introduzione alle MFC (Microsoft Foundation Class)

 

Bentornati al corso.
Come premesso nell’ultima lezione cambiamo un po’ discorso: in questa lezione ci dedicheremo di più alla programmazione pura che alle funzioni predefinite del Visual C++. Abbiamo oramai strumenti a sufficienza per poter iniziare a programmare a tutti gli effetti.
Introdurremo ora un gruppo di classi importantissime in programmazione col Visual C++ e che consentono di velocizzare, data la loro struttura, la creazione dei nostri programmi.
Tali classi, da alcuni programmatori amate, da altri odiate, sono le MFC ovvero le Microsoft Foundation Class.
Che hanno di particolare tali classi?
Semplice: sono state concepite studiando a fondo tutte le esigenze che ogni programmatore si troverà ad affrontare nel corso della stesura dei suoi programmi.
Pensiamoci bene: perché scervellarci a fare classi nuove quando si può usare le classi esistenti ottimizzate della Microsoft e risparmiare tempo e fatica?
Il lavoro è sempre lavoro e come tale meglio riposarsi il più possibile no?

Analizziamo come sono strutturate le nostre classi che ci permetteranno di dormire di più

Esse si dividono in :
1) Classi per la gestione dell’Architettura dell’applicazione (CDocument, CWinApp);
2) Classi per la gestione delle Eccezioni ( CException);
3) Classi per la gestione dei File (CFile);
4) Classi per la gestione della Grafica (CDC);
5) Classi Per la gestione della Memoria atte a facilitare la Programmazione (CArray, CString ).

Analizzeremo meglio in dettaglio tali classi.
Per ora diciamo che esse derivano tutte da una classe particolare molto generica detta CObject.
Questa classe è una sorta del classico void * che conosciamo nel linguaggio C.
La sua potenza è data dalla sua genericità. E’ come se volessimo creare un elemento da poter inserire in un array e non vogliamo preoccuparci della sua struttura interna.
Una bella potenza non vi pare? Col tempo vedremo anche come evitare di effettuare casting su tali oggetti.

Per includere le classi MFC la procedura è molto semplice: esse sono divise in gruppi di appartenenza a seconda dello scopo che esse svolgono. Per alcune non è necessaria una inclusione esplicita (vedi CString ), per altre, le meno utilizzate, è necessario dichiararne a volte l’utilizzo (CSocket).

Analizziamo ora la classe base di tutte le MFC:
CObject
Costruttori e operatori di creazione e assegnamento

CObject()

Costruttore di default

~CObject( const CObject & src)

Costruttore per copia

void* operator new( size_t nSize );

Rimappaggio dell’operatore new per CObject

voidoperator delete( void* p );

Rimappaggio dell’operatore delete per CObject

voidoperator =( const CObject& src );

Operatore di Assegnamento


Serializzazione (scrittura e lettura dei valori da stream)

BOOLIsSerializable( ) const

Verifica se la classe derivate da CObject ha una funzione membro di serializzazione. Restituisce TRUE in caso positivo, FALSE altrimenti

virtualvoid Serialize( CArchive& ar );

Carica o salva I dati della classe nell’archivio puntato da CArchive. CArchive è una classe associata a un file da dove verranno prelevati o scritti i dati.


Varie

virtualCRuntimeClass* GetRuntimeClass( ) const;

E’ la funzione membro di cui parlavamo prima, consente di verificare il tipo di oggetto derivante dalla classe CObject. Restituisce un puntatore all’istanza della classe verificabile tramite macro che analizzeremo in seguito.

BOOLIsKindOf( const CRuntimeClass* pClass ) const;

Collegata a GetRuntimeClass consente di distinguere I vari oggetti di tipo CObject presenti in un qualsiasi oggetto. Restituisce Vero se la classe in questione è del tipo passatogli tramite pClass, Falso altrimenti


Bene, per ora fermiamoci qui.
Noterete la facilità di utilizzo di queste classi nella prossima lezione in cui creeremo delle classi derivate tutte da CObject, vedremo come distinguere tali istanze e come utilizzarne le potenzialità.
Alla prossima lezione

 

Torna all'indice Generale del corso di Corso di Visual C++ di Software Planet