C++ -> linguaggio ad alto livello
Commenti
Commenti -> ignorati dal compilatore.
// per commento di 1 riga.
/* */ per commento di blocco.
Identificatori
- Variabili: contengono il valore di un qualche tipo -> valore -> cambia nel tempo.
- Costanti: simbolo -> identificano valori che non cambiano nel tempo -> tipo -> non cambia.
- Etichette: utilizzate da goto.
- Tipi definiti dal programmatore: costruiti da tipi primitivi.
- Funzioni: indicano il sottoprogramma.
Keywords
Parole chiave cui significato è prestabilito, non possono essere usate come identificatori.
Intero
Senza cifre decimali (con e senza segno) -> int, long int, unsigned long int.
O negativo o intero a cero, o al massimo positivo...
Se più valori si vuole usare 0 o 1. Se non viene specificato il compilatore sceglie il tipo più piccolo possibile per conservare Float (f + F) o long double (l + L).
Operassegnamento
Op += Prime valore ia espresso: ovv esempi sopra programmazione -> a vx.
Opera ++ e -- -> postiposta esegue esame, dopo esecuzione il valore (già incrementata).
Operatore ternario
Cond ? expr1 : expr2 -> Se cond è vera -> expr1 altrimenti -> expr2.
Break e continue
Miglior controllo sui cicli.
- Break -> dentro ciclo o switch, ne causa la eliminazione -> Controllo passato o sei successiva al ciclo.
- Continue -> solo nei cicli, causa l'interruzione della corrente esecuzione del corpo del ciclo -> Controllo passato alla prima fine del capo del ciclo.
Dichiarazioni
Ogni identificatore deve essere dichiarato.
Contenente di stack/area persistenza necessaria.
Determinare l'interpretazione da attribuire al var. bit.
Permette al compilatore di determinare errie errori semantici.
Dichiarazioni più determinazione di ottenere un var.
Determina il tipo di parametri: e il tipo del valore restituisto.
Consente compilatore per determinare errori semantici.
E.g: VARIABILI - COSTANTI - TIPI.
Scope e lifetime
Dichiarazione variabile: -> si estende dal anno immediatamente più vicino fino alla fine del blocco di istruzioni in cui viene inserito.
Operare -> risolve il blocco cui referisce alla dichiarazione globale di un identificatore.
Lifetime -> variabile vive esattamente dal notificarla e distrutta alla fine del blocco dove è passa la dichiarazione.
Array
Array -> permette di raccogliere nello stesso nome variabili dello stesso tipo -> Multidimensional collegabili -> array o matrici.
char x[1-10] -> lunghezza [0]-10 carattere nella.
No inferire l'operazione di assegnamento.
C++ -> linguaggio ad indirizzo
Commenti
// -> ignorati dal compilatore.
Identificatori
- Variabili: Contenitori di valori di un qualche tipo - valore -> cambia nel tempo.
- Costanti: Sintattico - identificano valori che non cambiano nel tempo - tipo -> non cambia.
- Etichette: Utilizzato da goto.
- Tipi definiti dal programmatore: costrutti della tipi primitive.
- Funzioni: indicano sottoprogrammi.
Keywords
Parole chiave cui significato è prestabilito; non possono essere usate come identificatori.
Intero
- Senza cifra decimale (con o senza segno) -> int, long int, unsigned long int.
- Ogni numero intero o in ottale o in esadecimale.
- Virgola mobile e double e float (f, F) o long double (l, L).
Operatore di assegnamento
- Op += prefissa -> prima esegue l'esame, poi esegue assegnamento a sx.
- Op = postfissa -> esegue l'esame dopo l'esecuzione a il valore (già incrementato).
Operatore ternario
Condi ? expr1 : expr2 -> se condi è vera -> expr1 altrimenti -> expr2.
Break & continue
Miglior controllo sui cicli.
- Break -> dentro ciclo o switch, ne causa la terminazione -> controllo passato a istr. successiva al ciclo.
- Continue -> solo nei cicli, causa l’interruzione della corrente esecuzione del corpo del ciclo.
Dichiarazioni
- Ogni identificatore deve essere dichiarato.
- Contenuti di stack/heap variabili necessarie.
- Determinare l’inizializzazione da ottenere su variabili.
Scopo & lifetime
Dichiarazione variabile: -> si estende dal punto immediatamente più vicino fino alla fine del blocco di istruzioni in cui appare; operatore -> risoluzione di breve intervallo di riferirsi alla dichiarazione globale di un identificatore.
Array
Permette di raccogliere nello stesso nome più variabili dello stesso tipo.
- Multi-dimensionali: logging (o matrici).
- char c[] = "ciao" -> lunghezza = (n+1).
Struct
Per racchiudere più elementi in un unico:
Struct e array persona [2]: 5 → {5*30B} = 300B.
amico3: 300B.
struct persona {
char nome[20];
int età;
};
struct dentro struct.
struct Data {
int anno,
int mese;
}
struct persona pippo {
char nome[20];
int età;
Data dataNas;
};
persona pippo = {"pippo", 20};
pippo.nome[0], pippo.datanas.mese.
Si definisce l'operatore di assegnamento.
Data og.data1 = {2022, 3};
Data donna = {3, 2023};
donna = op1;
Union
Sintatticamente → Uguale a struct.
I campi vengono memorizzati a partire dallo stesso indirizzo → memoria: v1. L'oggetto → quello della componente più grande.
Enumerazioni
→ Per poter definire insieme esplicitamente → enum nome { id1, id2, id3 };
Gli enumerazione a ciascuni identificatore una costante intera:
int n=verde [r=2];
Typedef
Esiste la possibilità di dichiarare un altro tipo.
typedef <tipo> <cost> → typedef unsigned short int OSI;
Utile per creare abbreviazioni di tipo complesso → soprattutto in presenza di puntatori e funzioni.
Funzioni
Valore di ritorno → tipo definito entro il main.
Definizione di funzione → si ripete la dichiarazione, del nome o dei parametri, e il tipo.
Parametri → Ciò che è necessario - il nome dei parametri, il tipo.
Se manca → Formal non mod permette acquisire il passato per comunicare.
Modalità di passato di output → passaggio per riferimento o puntatori.
Parametri di default → int somma (int a, int b=7) → se non viene specificato valore 3.
L'ultimo esame gli ultimi;
La funzione main()
Invocare automaticamente dal sistema quando il programma viene eseguito.
int main(char argc, char\* argv[]);
usato per comunicare al SO la causa di terminazione.
argc → indice di n dei parametri sul riga di comando attraverso cui il codice eseguito programma.
argv → sovraspici scritte l'interessa come cercare e parametri. Il primo index del programma l'argomento sul riga del comando.
Funzioni inline
→ Per non influenzare il vaiaggio della ricola funzioni.
Le compilazione memorizzato ccomp → quando intende la chiamata lo sostituisce alla chiamata della funzione.
Macro
#define dimensione (min, max) …
La inlin chiamato non sono → separati e prendere inline qualsiasi funzione.
Con funzione tipo ciao e y → Perché era e lo scopo della funzione.
Overloading
Sovraccaricamento → Attribuire alla stessa nome più significati; il compilatore decide quale valutare.
int somma (int, int)
float somma (float, float)
Condizione: La nuova deve differire per tipo di numero di parametri.
Puntatori e riferimenti
int a; → puntatore a intero double *b; → puntatore a puntatore a double int *c, int *d;
a, → per ottenere l’indirizzo: &a.
anche malloc(fflo di operand indicherà la zona di memoria. sono variabili. b!z per ottenere l’indirizzo:
Puntatori di array
Esempio semplificato:
dereferenzia un puntatore nello stesso modo in una selezione di elemento di un array → stesso nome del primo elemento di array.
int a[]={0,1,2,3,4,5}
int *ptr3 equivale a ptr={5}
a0Aeq{3} equivale a *(ptr+3)
Tipo char
char array[6]=“ciao”
char *ptr= “ciao”
cout<array>. e ok ptr.
Differenza
Puntatore vs più usare l’aritemica. e usarlo come array.
Il nome di un array non è un puntatore a cui è possibile assegnare un nuovo valore.
P{t+i}
cout «t[i]
Uso dei puntatori
- Realizzazione strutture dati dinamiche → quando non riesce a priori la quantità di dati che si andremo a manipolare.
- Inizializzazione di variabili di oggetti passati.
- Passaggio address di parametri di grosse dimensioni.
- Rendere possible il passaggio di parametri di una funzione.
Lista
Utilizzo: puntatori, Numero massimo di elementi non definito a priori.
Composta da celle (nucleo) tra di loro:
each:
La prenota: valore.
Puntatore della cella successiva.
struct elem { int e; elem *next;} q = memorizza il valore.
next = puntatore alla cella successiva.
Creazione di un nuovo oggetto
Allocando un nuovo blocco di memoria della heap-memory.
Si tramite l'operatore new e il tipo specificato.
Distribuzione di un oggetto
Deallocare il blocco allocato nella heap-memory.
Operatori statici
Numero massimo strutture dinamiche, determinato dalla dimensione della heap-memory o da certo il limite della quantità di memoria del sistema.
Un oggetto allocato dinamicamente può essere creato in uno scopo ed essere acceduto in un altro trasmettendone l'indirizzo.
Passaggio di parametri
void change(int * p) riceve come parametro un puntatore a int, quindi riceve l'indirizzo di una cella di memoria. \n La dereferenziazione con tanti la modifica dell'oggetto, *(p) = *(p) + 1 esprime che vega vo. costante void funzione (elem p); void change(*p); *(p) = *(p) con grandi dimeso e modificia -> cambia i di esezione della funzione.
Restituire un puntatore
A int* somme (int q, int s) { int res; return & res; }
Se scriviamo l'indirizzo di una variabile local, viene distrutto quando la funzione termina. Soluzione: allocare la variabile fill nello heap per restituire l'indirizzo (E: ricordarsi di allocarla).
Passaggio parametri con riferimento
void funct(int & a) -> main() int a=5; fun(A); →I riferimenti non devono essere dereferenziati.
I riferimenti non possono essere associati ad un'altra variabile dopulare dell'inizializzazione.
Linkage
Identificatori di variabili. Costanti, funzioni possiedono linkage. Un programma può avere più file che vengono compitiati separatamente e poi linkati per ottenere un eseguibile.
F1: f1.cpp
void fun() {int c=0return c;
F3:f3.cpp
extern int cfun(5)
F2:f2.cpp
c=0
dichiarare e iniziare una variabile protinisce il valore della variabile nel file a.cpp.
exterm = keyword che informa il compilatore che la variabile esiste in un altro file. Il linker provvede a collegare i file. Quindi extern sarà seguito solo da un identificatore. extern per le funzioni serve a far completare il compilatore della funzione externa int c(int);
Nomi visibili all'eserno di un file: linkage esterno identifiersinte: variabili locali non interne nomi invocati esterni.