Differences

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

Link to this comparison view

appunti3s:possibili_approfondimenti [2018/04/25 07:55] (current)
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: 2018/04/25 07:55
  • (external edit)