May 25
Si supponga di voler costruire una classe C ++ per rappresentare i numeri complessi da C ++ non include un tipo di dati per loro. La classe "Complex" deve gestire i numeri di tipo int, float e double. Si può ripetere lo stesso codice per tre volte, o è possibile scrivere una volta e utilizzare i modelli che supportano i tipi di dati generici. Alla fine, la classe sarà simile a una delle classi container STL.
1 Acquisire familiarità con la sintassi del modello, se non siete già. Per dichiarare una classe template, inserire la seguente riga di codice immediatamente sopra la dichiarazione della classe, come indicato:
template <class T>
classe Complex {
// eccetera...
2 Si noti che "modello" e "classe" sono le parole chiave. "T" è il nome assegnato al tipo di dati generici. T può assumere la forma di un int, float o doppio. È 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 un po 'diverso in C ++, ai fini di questa esercitazione, sono equivalenti.
3 Utilizzare "T" nella dichiarazione corpo della classe in cui si desidera l'elaborazione generica. Dati del membro "reale" e "imag" sono di tipo T, perché possono prendere l'identità di qualsiasi tipo di numero. La funzione membro Real () viene prototipo con T perché può tornare numeri di tipo int, float o doppia:
template <class T>
classe Complex {
T vero, imag;
pubblico:
Complesso (const T r, const T i): real ((T) 0), ((T) 0) {}
T Real () const;
// eccetera...
4 Ripetere la definizione del modello per ogni funzione membro si è definito al di fuori del corpo della classe. Inoltre, posizionare il parametro T all'interno parentesi angolari e inserirlo tra il nome della classe e l'operatore di applicazione, come segue:
template <class T>
T Complesso <T> :: Real () const {
rendimento reale;
}
5 Dimostrare un oggetto complesso che utilizza int e uno che utilizza float:
int main () {
Ni complesse <int> (4, -5); // Modulo 4 - J5
Nf Complesso <float> (4f, -5.f); // Modulo 4,0 - j5.0
cout << ni.Real () << endl; // Stampa 4
cout << nf.Real () << endl; // Stampa 4,0
}
6 Scopri come utilizzare classi contenitore come vector <T> e gli algoritmi, come copy (). Studiare la STL. Dal momento che la Standard Template Library è una libreria generica costruita di modelli, è un ottimo posto per imparare a costruire classi generiche utilizzando i modelli.