Tipi fondamentali
In C++ ogni variabile ha un tipo dichiarato esplicitamente. Il tipo determina quanta memoria viene riservata e quali valori la variabile può contenere. I tipi che userai nella pratica quotidiana sono sei.
| Tipo | Byte | Cosa contiene | Esempio |
|---|---|---|---|
| int | 4 | Numeri interi (positivi e negativi) | int voti = 7; |
| float | 4 | Numeri decimali, precisione singola (~7 cifre) | float media = 8.5f; |
| double | 8 | Numeri decimali, precisione doppia (~15 cifre) | double pi = 3.14159265; |
| char | 1 | Un singolo carattere ASCII | char lettera = 'A'; |
| bool | 1 | Valore logico: true o false |
bool attivo = true; |
| string | variabile | Sequenza di caratteri (testo) | string nome = "Mario"; |
Usa double quando la precisione conta (calcoli scientifici, finanziari). Usa float quando la memoria è limitata (es. array grandi di valori decimali). Per la maggior parte degli esercizi scolastici, float è sufficiente — ricorda il suffisso f: 8.5f.
Dichiarazione e inizializzazione
Dichiarare una variabile significa creare uno spazio in memoria con un nome e un tipo. Inizializzare significa assegnarle subito un valore. Le due operazioni possono avvenire insieme o separatamente.
// dichiarazione: riserva memoria (valore iniziale indeterminato) int eta; // inizializzazione contestuale: dichiarazione + valore in una riga int eta = 18; float media = 8.5f; double pi = 3.14159265; char lettera = 'A'; // char usa apici singoli, NON doppi bool attivo = true; string nome = "Mario"; // string usa apici doppi // assegnazione dopo la dichiarazione int x; x = 42; // valido, ma x aveva valore indefinito prima di questa riga
In C++ una variabile locale non inizializzata contiene un valore casuale — qualunque cosa fosse in memoria in quel momento. Usarla prima di assegnarle un valore è un bug difficile da trovare. Buona regola: inizializza sempre.
Nomi di variabile — regole
// ✅ validi int eta; // lettere minuscole int etaStudente; // camelCase — convenzione comune int eta_studente; // snake_case — alternativa int _x; // underscore iniziale: valido (ma evitare) // ❌ non validi int 2eta; // inizia con cifra int eta studente; // spazio nel nome int int; // parola chiave riservata
Costanti — const
Una costante è una variabile il cui valore non può essere modificato dopo l'inizializzazione. Si dichiara con la parola chiave const prima del tipo. Se provi a modificarla, il compilatore segnala un errore.
const int MAX_STUDENTI = 30; // numero massimo di studenti in classe const float IVA = 0.22f; // aliquota IVA — non cambia a runtime const string SCUOLA = "ITIS"; MAX_STUDENTI = 35; // ❌ errore di compilazione: assignment of read-only variable
Non è obbligatorio, ma scrivere le costanti in maiuscolo (MAX_STUDENTI, IVA) è una convenzione diffusa che le distingue visivamente dalle variabili. Usala sempre per rendere il codice più leggibile.
Operatori aritmetici e casting
Operatori aritmetici
int a = 10, b = 3; a + b // 13 — addizione a - b // 7 — sottrazione a * b // 30 — moltiplicazione a / b // 3 — divisione INTERA (int/int = int, il resto viene scartato) a % b // 1 — modulo (resto della divisione intera) // operatori di assegnazione composta a += 5; // equivale a: a = a + 5 a -= 2; // equivale a: a = a - 2 a++; // incremento: a = a + 1 a--; // decremento: a = a - 1
10 / 3 in C++ restituisce 3, non 3.333.... Quando si dividono due int, il risultato è sempre un intero (troncato verso zero). Per ottenere un risultato decimale almeno uno dei due operandi deve essere float o double.
Casting esplicito
Il casting converte un valore da un tipo a un altro. Il modo C++ moderno usa la sintassi static_cast<tipo>(valore).
int a = 10, b = 3; // senza cast: divisione intera double ris1 = a / b; // 3.0 — il cast avviene DOPO la divisione intera // con static_cast: divisione reale double ris2 = static_cast<double>(a) / b; // 3.333... — a diventa double PRIMA della divisione // cast da double a int: troncamento (NON arrotondamento) int troncato = static_cast<int>(3.99); // 3, non 4
🔧 Esplora i tipi
Seleziona un tipo per vederne dimensione, range e dichiarazione di default. Poi inserisci un valore per verificare se è compatibile.
Inserisci un valore e verifica se il tipo selezionato può contenerlo: