Come utilizzare i modelli C ++ Classe

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.

istruzione

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.