Introduzione Le due componenti principali dei programmi


Ogni volta che nella definizione della funzione o della classe appare identifier questo viene sostituito dal compilatore con il tipo fornito nella chiamata



Scaricare 584 b.
Pagina7/9
13.12.2017
Dimensione del file584 b.
1   2   3   4   5   6   7   8   9

Ogni volta che nella definizione della funzione o della classe appare identifier questo viene sostituito dal compilatore con il tipo fornito nella chiamata.

  • La dichiarazione e l’implementazione del template devono essere nello stesso file ove il template viene utilizzato



  • Parametri templati

    • Parametri interi possono essere inclusi nella dichiarazione del template

    • I parametri di default possono essere tralasciati



    Templates di templates

    • L’argomento di un template puo` essere esso stesso un template

    • questo permette la creazione e l’utilizzo di meta-templates (templates istanziati con templates) molto sofisticati

    • la Standard Template Library fa uso di questa possibilita`



    Funzioni template e parametri

    • Una buona parte dei compilatori accetta una sintassi ristretta per quel che riguarda le funzioni template. ANSI/C++ prevede invece che anche parametri numerici possano essere inclusi nella definizione del template



    Membri statici

    • Per le classi template, gli attributi statici non sono universali ma specifici di ogni istanza

    • Le variabili statiche MyClass::counter e MyClass::counter sono diverse



    Un esempio: lo stack di interi



    Un esempio: lo stack di interi



    Lo stack “templato”



    La Standard Template Library

    • La libreria standard STL e’ una libreria di classi di contenitori, algoritmi ed iteratori.

    • STL e’ una libreria generica: tutti i suoi componenti sono parametrizzati mediante l’utilizzo dei template



    Iteratori (puntatori intelligenti)

    • Gli iteratori sono dei puntatori agli elementi di un contenitore e ci permettono di muoverci all’interno di esso:

      • Iteratori monodirezionali: Permettono di accedere all’elemento successivo o al precedente
      • Iteratori bidirezionali : Permettono di accedere sia all’elemento successivo che al precedente
      • Iteratori ad accesso casuale : Permettono di accedere ad un qualunque elemento del contenitore


    Contenitori

    • Un contenitore è un oggetto capace di immagazzinare altri oggetti e che possiede metodi per accedere ai suoi elementi.

      • Ogni contenitore ha un iteratore associato che permette di muoversi tra gli elementi contenuti
      • Una sequenza è un contenitore di lunghezza variabile i cui elementi sono organizzati linearmente. E’ possibile aggiungere e rimuovere elementi
      • Un contenitore associativo è una sequenza che permette un efficiente accesso ai suoi elementi basato su una chiave.


    Sequenze

    • vector

      • Tempo costante di inserimento e cancellazione di elementi all’inizio e alla fine del vettore.
      • Tempo lineare con il numero di elementi per inserimento e cancellazione di elementi all’interno del vettore
      • Iteratore ad accesso casuale
    • list

      • Tempo costante di inserimento e cancellazione di elementi in ogni punto della lista
      • Iteratore bidirezionale


    vector

    • Le locazioni di memoria sono contigue

      • Accesso casuale, veloce l’accesso agli elementi, lenti inserimento ed estrazione


    list

    • Simile allo stack, ma consente di muoversi in due direzioni

    • Le locazioni di memoria non sono contigue

      • Lenta la ricerca, veloci inserimento ed estrazione


    Contenitori associativi

    • Sono contenitore di coppie ( key, value ) e possiedono un iteratore bidirezionale

    • map



    Algoritmi

    • Gli algoritmi sono delle funzioni globali capaci di agire su contenitori differenti

    • Sono incluse operazioni di ordinamento (sort, merge, min, max...), di ricerca (find, count, equal...), di trasformazione (transform, replace, fill, rotate, shuffle...), e generiche operazioni numeriche (accumulate, adjacent difference...).



    Esempio uso sequenze



    Esempio uso contenitori associativi



    Assegnazione di un metodo ad un messaggio

    • I metodi pubblici di una classe costituiscono l’interfaccia della classe (cioè i messaggi che l’oggetto può interpretare)

    • La funzione è assegnata al messaggio in fase di codifica (early binding)



    1   2   3   4   5   6   7   8   9


    ©astratto.info 2017
    invia messaggio

        Pagina principale