Corso di Visual C++

Array di stringhe - CStringArray

 

Abbiamo analizzato le scorse lezioni la potenza della classe CString e CObject.
Questa volta andremo ad unire le potenze di queste due classi in una classe tanto potente quanto versatile:

La CStringArray.

Che cosa è tale classe?
E’ una classe che permette di implementare facilmente ciò che con altri compilatori C++ richiede tempo e fatica, ovvero l’array di stringhe.

L’array di stringhe trova molte applicazioni nella programmazione; si pensi ad esempio il voler implementare una normalissima agenda.
Avremo bisogno di creare una classe del tipo:

class CAmico {
public:
CAmico(); //Costruttore
~CAmico(); //Distruttore
CString Nome;
CString Cognome;
CString Indirizzo;
CString Città;
……..
};

Ovviamente avremo anche bisogno di creare una struttura di tipo CObject o un’array di CAmico allocata dinamicamente per poter memorizzare tali elementi.

CAmico* ptrAmici;
ptrAmici=(CAmico*) new CAmico[MAXNUMELEM];
ptrAmici[0].Nome=”Raffaele”;
ptrAmici[0].Cognome=”Mancoletti”;
.
.
.
>
e così via.

E se mi servissero a un certo istante poter salvare più di MAXNUMELEM elementi?
Dovremmo riallocare maggior memoria, effettuare una copia degli elementi vecchi nella nuova struttura e deallocare la vecchia memoria ovvero:

Void Rialloca(CAmici *lista, int nuovadim){
CAmico *nuovalista;
nuovalista=(CAmico*) new CAmico[nuovadim];
int limite;
if (nuovadim<MAXNUMELEM)
limite=nuovadim;
else limite=MAXNUMELEM
for (int x=0;x<nuovadim;x++){
nuovalista[x].Nome=lista[x].Nome;
……
……
}
delete [] lista;
lista=nuovalista;
}
Come si nota il lavoro da effettuare non è da poco.

Anche volendo utilizzare il luogo dell’array dinamico di CAmico la classe CObject dovremmo preoccuparci di allocare un’array di CObject (vedremo la prossima volta che in realtà esiste un’altra classe che evita di fare ciò).

Come sempre le MFC ci vengono incontro mettendoci a disposizione una classe che ci risolve non pochi problemi:
la CStringArray, della quale analizziamo le funzioni principali.

CStringArray
Costruttore

CStringArray()

Costruisce un’array vuoto di CString

Funzioni principali

int GetSize() const

Restituisce il numero di elementi dell’array

int GetUpperBound() const

Restituisce l’indice dell’ultimo elemento aggiunto nell’array, -1 se l’array è vuoto

void RemoveAll()

Elimina tutti gli elementi nell’array.


Funzioni di accesso ai dati

CString GetAt(int id) const

Restituisce l’elemento nella posizione id

void SetAt(int id, LPCSTR val)

Setta il valore a val dell’elemento alla posizione id

CString ElementAt(int id)

Come GetAt


Operazioni sull’Array

int Add(LPCSTR elemento)

Aggiunge un elemento alla fine dell’array e restituisce l’indice dell’elemento aggiunto

int Append(const CStringArray &src)

Unisce l’array src all’array corrente e restituisce l’indice del primo elemento aggiunto dell’array src

void Copy( CStringArray& src)

Copia l’array src nell’array corrente

>void InsertAt(int id,LPCTSTR elemento, int cnt=1)

Inserisce uno o più elementi a partire dalla posizione id per cnt volte

>void RemoveAt(int id, int cnt=1)

Rimuove cnt elementi a partire dalla posizione id

Operatori

CString& operator[](int id)

Operatore simile a GetAt e SetAt



Bene, come al solito eccovi il mio programmino di esempio (vi stò viziando troppo però eh?)
E’ una agenda temporale (i dati non vengono salvati su file, ma a questo provvederemo prossimamente appena arriviamo alla gestione dei database e file ) che usa CStringArray in luogo di CAmico.

Analizzando il codice noterete i vantaggi della classe CStringArray.
Nel programmino ho usato un’array di CStringArray, ovvero una matrice di stringhe.
L’indice indica rispettivamente i Nomi, i Cognomi, gli Indirizzi, le Città, i Numeri di Telefono (visti come stringa) , le E-Mail.


Eccovi la schermata principale e alla prossima

 

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