Possibili approfondimenti

Argomenti non indispensabili in questo corso:

  • Ereditarietà
  • Enumerazioni
  • Static
  • Altro
  1. riutilizzo dei distruttori della classe base
  2. riutilizzo dei puntatori della classe base
  3. ereditarietà semplice (private)
  4. promozione del tipo di accesso da private a public
  5. ereditarietà multipla
  1. early binding vs late binding (static binding)
  2. classi base astratte
  3. concetto di overloading per funzioni (operatori) con firme diverse
  4. concetto di overriding (diverso da overloading) per le funzioni ereditate
  5. ?overloading: funzioni membro virtuali (pure e non)
  6. ?overloading: distruttore virtuale
  7. ereditarietà virtuale (classi virtuali)

Le enumerazioni sono tipi di dato definiti dall'utente, che si definisce con le parentesi graffe, come una classe, che ha un nome maiuscolo, come una classe…

Come dice la parola, le enumerazioni sono utili quando si vuole rappresentare degli oggetti a cui si vuole attribuire in un certo ordine di grandezza. Le enumerazioni sono quindi costanti numeriche intere che costituiscono un nuovo tipo di dato (diverso da int). int è più ampio e contiene le enumerazioni…

Definizione

Nel seguente esempio viene definita una enumerazione chiama Mese, per rappresentare dodici nuove costanti che rappresentano i mesi dell'anno come se fossero 12 numeri ordinati tra loro per grandezza. Si deve specificare il valore del primo numero, solo se è diverso da zero. Gli altri numeri si incrementano automaticamente.

enum Mese {
     gen=1,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic
 };	// Mese diventa un nuovo tipo di dato.
enum Colore {
     nero=1,bianco,rosso,blu,rosa,verde,indaco,giallo,viola
 };

Utilizzo

Mese nuovoMese=apr;	// corretto
 
Mese nuovoMese=4;       // errore  di tipo
		        // una variabile tipo Mese può valere solo uno degli elementi definiti in Mese
  
nuovoMese=Mese(4);      // per trasformare un int in una enumerazione è necessario fare un casting esplicito
 
 
int numero=nuovoMese;    // qui non è necessario il casting perché int 
  
 Colore nuovoColore;
nuovoColore=apr;    //errore di tipo (come sopra)
nuovoColore=rosso;

L'attributo static nel linguaggio C e nel linguaggio C++ ha dei significati diversi.

Nel linguaggio C++ possono essere static:

  1. le variabili locali delle funzioni
  2. i dati membri delle classi
  3. le funzioni membro delle classi
  1. Nel primo caso le variabili locali static sono create solo la prima volta che si incontra la loro dichiarazione e vengono distrutte alla chiusura del programma. Questo comportamento differisce da quello delle tradizionali variabili locali (automatiche).
  2. Nel secondo caso i dati membri static sono creati all'avvio del programma e vengono distrutti alla chiusura del programma. Tali dati membro sono condivisi tra tutti gli oggetti appartenenti a quel tipo di classe. Non sono oggetti globali. Se sono costanti si inizializzano nella definizione della classe (header), altrimenti si inizializzano insieme all'implementazione delle funzioni della stessa classe (source).
  3. Nel terzo caso le funzioni membro static sono dichiarate tali SE e SOLO SE non accedono ai dati non static.

In un diagramma di classe (UML), gli attributi static sono sottolineati.

  1. funzioni inline
  2. external
  3. costruttore explicit (conversioni implicite a pag 322 stroupstrup)
  4. oggetti, membri e dati statici
  5. costruttore di oggetti anonimi
  6. forward class references (o forward declaration???) Class File;

Esercizio

Provare a scrivere un esempio di programma che legge separatamente nome e cognome e poi mette questi dati all'interno di un'unica variabile usando l'operatore concatenazione (+). Provare a scrivere l'esempio inverso… (aiutati da std::stringstream in <sstream>)

  • appunti3s/possibili_approfondimenti.txt
  • Last modified: 2018/04/25 07:55
  • (external edit)