Matrix

 

Problema: implementare un dato di tipo matrice che supporti le seguenti funzionalità:

 

Si propongono varie implementazioni via via più evolute:

1.      inizialmente il problema viene risolto in forma procedurale definendo il dato come struttura e fornendo le opportune funzioni di gestione (allocazione/deallocazione, accesso, stampa). Il tipo degli elementi è scelto dallo sviluppatore.

proceduralcpp\matrix.h

proceduralcpp\matrix.cpp

proceduralcpp\main.cpp

 

2.      Il dato viene definito come oggetto: le attività di allocazione/deallocazione   vengono espletate nel costruttore/distruttore mentre le funzioni di accesso e stampa vengono tradotte nei corrispondenti metodi.

class\matrix.h

class\matrix.cpp

class\main.cpp

 

3.      I metodi di accesso vengono unificati usando riferimenti agli elementi.

reference\matrix.h

reference\matrix.cpp

reference\main.cpp

 

4.      I metodi di accesso e di stampa vengono semplificati sovraccaricando gli opportuni operatori

operators\matrix.h

operators\matrix.cpp

operators\main.cpp

 

5.      L’oggetto matrice viene specializzato nella versione densa e sparsa. L’operatore di accesso diviene puramente virtuale. Gli elementi vengono memorizzati negli opportuni contenitori della libreria standard.

inheritance\matrix.h

inheritance\matrix.cpp

inheritance\densematrix.h

inheritance\densematrix.cpp

inheritance\sparsematrix.h

inheritance\sparsematrix.cpp

inheritance\main.cpp

 

6.      Le classi matrici vengono parametrizzate rispetto al tipo degli elementi in  modo che questo possa essere scelto dall’utente.

templates\matrix.h

templates\densematrix.h

templates\sparsematrix.h

templates\main.cpp