User Tools

Site Tools


appunti3s:possibili_approfondimenti
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


appunti3s:possibili_approfondimenti [2020/06/08 22:19] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +======Possibili approfondimenti======
 +Argomenti non indispensabili in questo corso:
 +  * Ereditarietà
 +  * Enumerazioni
 +  * Static
 +  * Altro
 +===== Ereditarietà2 =====
 +  - riutilizzo dei distruttori della classe base
 +  - riutilizzo dei puntatori della classe base
 +  - ereditarietà semplice (private)
 +  - promozione del tipo di accesso da private a public
 +  - ereditarietà multipla
 +
 +  - early binding vs late binding (static binding)
 +  - classi base astratte
 +  - concetto di overloading per funzioni (operatori) con firme diverse
 +  - concetto di overriding (diverso da overloading) per le funzioni ereditate
 +  - ?overloading: funzioni membro virtuali (pure e non)
 +  - ?overloading: distruttore virtuale
 +  - ereditarietà virtuale (classi virtuali)
 +
 +
 +=====Enumerazione (enumeration)=====
 +
 +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.
 +<code>
 +enum Mese {
 +     gen=1,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic
 + }; // Mese diventa un nuovo tipo di dato.
 +</code>
 +<code>
 +enum Colore {
 +     nero=1,bianco,rosso,blu,rosa,verde,indaco,giallo,viola
 + };
 +</code>
 +====Utilizzo ====
 +<code>
 +Mese nuovoMese=apr; // corretto
 +</code>
 +<code> 
 +Mese nuovoMese=4;       // errore  di tipo
 +         // una variabile tipo Mese può valere solo uno degli elementi definiti in Mese
 +</code>
 +<code>  
 +nuovoMese=Mese(4);      // per trasformare un int in una enumerazione è necessario fare un casting esplicito
 + </code>
 +<code> 
 +int numero=nuovoMese;    // qui non è necessario il casting perché int 
 +</code>
 +<code>  
 + Colore nuovoColore;
 +nuovoColore=apr;    //errore di tipo (come sopra)
 +nuovoColore=rosso;
 +</code>
 +
 +===== Static =====
 +L'attributo static nel linguaggio C e nel linguaggio C++ ha dei significati diversi.
 +
 +Nel linguaggio C++ possono essere static:
 +  - le variabili locali delle funzioni
 +  - i dati membri delle classi
 +  - le funzioni membro delle classi
 +
 +  - 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).
 +  - 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).  
 +  - 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.
 + 
 +
 +===== altro =====
 +  - funzioni inline
 +  - external
 +  - costruttore explicit (conversioni implicite a pag 322 stroupstrup)
 +  - oggetti, membri e dati statici
 +  - costruttore di oggetti anonimi
 +  - 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: 2020/06/08 22:19 by 127.0.0.1