Si supponga di che voler costruire una classe C++ per rappresentare i numeri complessi, dal momento che C++ non include un tipo di dati per loro. La classe "Complex" deve gestire un numero di tipo int, float e double. È possibile ripetere lo stesso codice tre volte, oppure si può scrivere una volta e utilizzare i modelli che supportano tipi di dati generici. Alla fine, la classe sarà simile a una delle classi contenitore STL.
Istruzioni
1
Classe {Complex ecc...
Acquisire familiarità con la sintassi del template se non siete già. Per dichiarare una classe modello, è necessario inserire la seguente riga di codice immediatamente sopra la dichiarazione di classe, come mostrato:
modello < classe T >
2
Si noti che il "modello" e "classe" sono parole chiave. "T" è il nome assegnato al tipo di dati generico. T può assumere la forma di un int, float o double. È sempre necessario racchiudere "classe" e "T" tra parentesi angolari. È inoltre possibile utilizzare la parola chiave "typename" al posto di "classe". Anche se queste parole chiave hanno un significato leggermente diverso in C++, ai fini di questa esercitazione, sono equivalenti.
3
Classe {Complex T real, imag; pubblico: Complesso (const T r, const T ho): real ((T) 0), ((T) 0) {} ecc...
Utilizzare "T" nella dichiarazione del corpo della classe in cui si desidera il trattamento generico. Membro dati "reali" e "imag" sono di tipo T, perché possono assumere l'identità di qualsiasi tipo di numero. La funzione membro Real() è il prototipo con T perché può restituire un numero di tipo int, float o double:
modello < classe T >
T Real() const;
4
Complesso T < T >:: Real() () {const ritorno reale; }
Ripetere la definizione del modello per ogni funzione membro che è definito all'esterno del corpo della classe. Inoltre, inserire il parametro T all'interno di parentesi angolari e inserirlo tra il nome della classe e l'operatore di ambito, come segue:
modello < classe T >
5
Ni complesse < int > (4, -5); modulo 4 - j5 Complesso nf < galleggiante > (4F, - 5. f); formare 4.0 - j5.0 cout << ni. Real() << endl; stampa 4 cout << nf. Real() << endl; stampa 4.0 }
Viene illustrato un oggetto complesso che utilizza int e uno che utilizza galleggiante:
int Main () {
6
Imparare a utilizzare le classi contenitore come vettore < T > e algoritmi come Copy (). Studiare il STL. Poiché la Standard Template Library è una libreria generica costruita dei modelli, è un luogo eccellente per imparare a costruire classi generiche mediante modelli.