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