Storia del C e C++
 Linguaggio C
 1972, nato come evoluzione
l
di
d due
d linguaggi
l
Fondamenti di Informatica
9 BCPL e B
– Lingaggi senza nozione di “tipo
tipo di dati”
dati
C++: Introduzione
Introduzione,, Tipi di Dato Fondamentali,
Fondamentali, Variabili
Dennis Ritchie (Bell Laboratories)
Linguaggio di sviluppo di Unix
Indipendente dall’Hardware
9 Portabilità
Prof. Francesco Lo Presti
1989: standard approvato
1990: pubblicato standard ANSI e ISO
9 ANSI/ISO 9899: 1990
Storia del C e C++
2
C++: Introduzione
4
Un Primo Esempio
 Linguaggio C++
 Inizio anni ‘80:
‘
Bjarne Stroustrup (Bell
( ll Laboratories))
 Estensione del C
 Fornisce funzionalità per la programmazione orientata
agli oggetti
// Programma di Esempio
Hello, World!
#include <iostream>
using namespace std;
9 Oggetti: componenti software riusabili
– Modellano entità
à del mondo reale
9 Programmi objectobject-oriented
g
stile di programmazione
p g
– Migliore
– Facilità nel modificare/correggere programmi
C++: Introduzione
int main(( ) {
cout << "Hello, World!\n";
return 0;
}
Linguaggio--Ibrido
Linguaggio
9 Si può
ò usare uno stile
til CC-like
lik
9 Si può usare uno stile ObjectObject-oriented
possono usare entrambi gli
g stili
9 Si p
C++: Introduzione
3
Un Primo Esempio
// Programma di Esempio
#include <iostream>
using namespace std;
int main(( ) {
cout << "Hello, World!\n";
return 0;
Un Primo Esempio
// Programma di Esempio
Righe che iniziano con // vengono
considerate righe di commento.
commento Non
hanno nessun effetto sul programma
#include <iostream>
Direttive. Le frasi che iniziano con il
simbolo
b l cancelletto
ll
(#) sono direttive
d
per il preprocessore del compilatore. La
direttiva include richiede l’inclusione del
file iostream.h che contiene le
di hi
dichiarazioni
i id
delle
ll operazioni
i i basilari
b il i di
I/O definite nella libreria standard
using namespace std;
int main(( ) {
cout << "Hello, World!\n";
return 0;
La funzione main e’
e il punto da cui inizia
l’esecuzione di un programma C++
}
main( ) restituisce un valore intero
istruzioni
C++: Introduzione
1.
Scrittura del programma
Codice
d
sorgente
2. Compilazione del codice sorgente
 File
Fil oggetto
tt
Stringa: una sequenza di caratteri
racchiusi tra virgolette “”
Ogni istruzione termina con un
punto e virgola ;
Costante numerica (intero)
}
Le Fasi della Programmazione
L’effetto dell’operatore << e’ quella di
inserire una sequenza di caratteri
(“Hello, World!\n”) nel flusso.
newline – andare a capo
return X fa terminare la funzione e
restituisce il valore X
tipo restituito nome funzione (lista arg) {
cout e’ il flusso standard di output del
C++ (di solito indirizzato allo schemo).
schemo)
\n: Escape Sequence
}
Definizione di funzione:
I nomi del programma appartengono allo
spazio dei nomi std
5
// Programma di Esempio
Costante stringa
C++: Introduzione
6
Ambiente Integrato di Programmazione
#i l d <iostream>
#include
i t
using namespace std;
 IDE (Integrated Development Environment)
 Ambiente per lla stesura, compilazione
l
e debugging
d
di
d
programmi
int main()
{
cout << "Hello, World!\n";
return 0;
}
3. Collegamento (linking)
 “Collega”
Collega il codice oggetto con il codice delle librerie
9 Librerie contengono il codice delle funzioni invocate dal
programma
Codice eseguibile
4. Caricamento ed Esecuzione
Codice
Sorgente
Compilatore
Programma
Oggetto
Librerie
Linker
Programma
Eseguibile
C++: Introduzione
7
Useremo DEVDEV-Cpp (disponibile anche sul sito del corso)
C++: Introduzione
8
…oppure
1.
…oppure
Scrivere il codice usando un semplice editor di
t t
testo
2. Compilare il file sorgente da linea di comando
g++ -o hello hello.cpp
E.g., Blocco Note
C++: Introduzione
9
C++: Introduzione
…oppure
Errori
3. Eseguire il programma da linea di comando
 Errori di Sintassi: Errori a tempo di compilazione
 Ill codice
d
sorgente viola
l le
l regole
l di
d sintassi
hello
10
// Programma di Esempio
#include <iostream>
using namespace std;
int main( ) {
cout << "Hello, World!\n ;
return 0
}
C++: Introduzione
11
C++: Introduzione
12
Errori
Inizio
Il Ciclo ModificaModifica-Compila
Compila--Debug
Modifica del
Programma
 Errori Logici: Errori a tempo di esecuzione
 Ill programma non svolge
l ill compito desiderato
d d
// Programma di Esempio
Compilazione
#include <iostream>
Errori di
Compilazione
using namespace std;
int main( ) {
Test del
Programma
cout << "Hell, World!\n”;
return 0;
}
Errori a
runtime
C++: Introduzione
Un Programma che Elabora Numeri
#include <iostream>
using namespace std;
FineC++: Introduzione
13
14
Un Programma che Elabora Numeri
#include <iostream>
Total value = 1.23
using namespace std;
int main()
int main()
{
{
Di hi
Dichiarazione
i
di variabili
i bili
int pennies = 8;
int pennies = 8;
int dimes = 4;
int dimes = 4;
quarters = 3;
int q
quarters = 3;
int q
Operatore di assegnazione
double total = pennies * 0.01 + dimes * 0.10
double total = pennies * 0.01 + dimes * 0.10
Costante numerica (virgola mobile)
+ quarters * 0
0.25;
25; /* valore totale delle monete */
+ quarters * 0
0.25;
25; /* valore totale delle monete */
cout << "Total value = " << total << "\n";
cout << "Total value = " << total << "\n";
return 0;
return 0;
}
}
Sintassi alternativa per i commenti
/* commento */
C++: Introduzione
15
C++: Introduzione
16
Costanti
Costanti
 Una costante è una qualsiasi espressione che ha un
 Caratteri
valore
l
prefissato
fi t
‘x’, ‘T’,’1’
 Stringhe
“Salve gente”, “Hello, World”, “”, “x”
Numeri interi, Numeri in virgola mobile, Caratteri,
Stringhe
 Numeri Interi
 Decimali:
 Esadecimali
9 Si premette 0x
75
75
-23
23
-23
23
0x4b
75
 I letterali che rappresentano caratteri sono
racchiusi da carattere apice (‘)
 Sequenze di letterali che rappresentato stringhe
sono racchiusi da tra due caratteri doppio apice (“)
 Numeri
N
i in
i virgola
i
l mobile
bil
 Numeri con parte frazionaria e/o fattore esponenziale
3.1456
3.1456
6.02e23
6.02·1023
1.6e-19
1.6·10-19
Variabili
 Le variabili sono spazi di
memoria,
i id
identificati
tifi ti d
da un nome
nome,,
che possono conservare valori di
un determinato tipo
 Ciascuna variabile deve essere
definita indicandone tipo e nome
 Una variabile puo’ contenere
soltanto valori del suo stesso
pennies
i
tipo
dimes
 Nella definizione di una variabile,
variabile,
qu rt rs
e’ possibile assegnarle un valore quarters
iniziale
total
C++: Introduzione
17
C++: Introduzione
18
I Nomi delle Variabili
…
int pennies = 8;
 Identificatore
Identificatore:: sequenza di lettere, numeri e simbolo di
int dimes = 4;
sottolineatura “_”
int quarters = 3;
…
Deve iniziare con una lettera
9 5pennies non va bene
Memoria
Non puo’’ essere una parola
l o simbolo
b l riservato del
d l linguaggio
l
Non p
puo’ contenere spazi
p
9 return non va bene
9 Pen nies non va bene
 Nomi validi
8
4
3
 Case
C
sensitive:
i i
maiuscole
i
l e minuscole
i
l vengono considerate
id
diverse
1.23
C++: Introduzione
pippo,
pippo pluto,
pluto ciao5,
ciao5 salve_a_tutti
salve a tutti
E’ bene scegliere nomi che descrivano adeguatamente il
contenuto della variabile
19
Pippo
pp e pippo
p pp sono due variabili diverse
C++: Introduzione
20
Dichiarazione di variabili
Dichiarazione di variabili
 Prima di usare una variabile occorre dichiararla
 Una volta dichiarate le variabili possono essere
specificando
ifi
d a quale
l tipo
ti di d
dato
t essa appartenga
t
 Sintassi
usate
t nell programma all’interno
ll’i t
d
dell lloro campo di
validita’ (scope)
nomeTipo nomeVariabile;
 E’ possibile dichiare piu’ variabili
nomeTipo
p nomeVariabile = espressione
p
;
 Definire una nuova variabile
contemporaneamente indicando una sola volta il
tipo
nomeVariabile, di tipo
nomeTipo nomeVariabile1, …, nomeVariabileN;
nomeTipo
Ti , ed
d eventualmente
t l
t assegnarle
l il valore
l
…
iniziale espressione
Altrimenti la variabile
ha un valore iniziale
indefinito
nomeTipo nomeVariabile1=espressione1, …, nomeVariabileN=espressioneN;
int pennies = 8;
…
int dimes = 4;
int pennies = 8, dimes = 4, quarters = 3;
int quarters = 3;
double total = pennies * 0.01 + dimes * 0.10
double total = pennies * 0.01
0 01 + dimes * 0.10
0 10
+ quarters * 0.25; /* valore totale delle monete */
+ quarters * 0.25; /* valore totale delle monete */
…
Tratteremo questo aspetto in seguito
C++: Introduzione
…
21
L’Assegnazione
C++: Introduzione
22
L’Assegnazione
 Abbiamo visto come i programmi usino le variabili
#include <iostream>
per memorizzare
i
i valori
l i da
d elaborare
l b
e i risultati
i lt ti
dell’elaborazione
 Le variabili sono posizioni in memoria che possono
conservare valori di un determinato tipo
 Il valore memorizzato in una variabile puo’
puo essere
inizializzato,, ma anche modificato durante
inizializzato
programma
g
l’esecuzione di un p
 Il cambiamento del valore di una variabile si
ottiene con un enunciato di assegnazione
using namespace std;
int main()
{
int pennies = 8;
double total= pennies*0.01;
totall viene definito
d f
ed
d
inizializzato
int dimes = 4;
total=total+ dimes * 0.10;
total viene modificato
int quarters = 3;
total=total+ quarters * 0
0.25;
25;
cout << "Total value = " << total << "\n";
return 0;
}
C++: Introduzione
23
C++: Introduzione
24
L’Assegnazione
L’Assegnazione
 Sintassi
…
nomeVariabile = espressione;
total=total+ quarters * 0.25;
…
…
Calcola
Memoria
total=total+ quarters * 0.25;
total+ quarters
total
1.23
. 3 * 0.25
0. 5
…
espressione e memorizza il
risultato nella posizione di memoria assegnata alla
variabile nomeVariabile
 L’assegnazione
L’
i
è un particolare
ti l
tipo
ti di espressione
i
 Calcola il valore di
pennies
i
8
dimes
4
quarters
qu
rt rs
3
total
C++: Introduzione
M
Memorizza
i
il
risultato in total
1.23
0.48
25
C++: Introduzione
Assegnazione o Dichiarazione?
Costanti Definite (#define)
 Non confondere la dichiarazione di una variabile
 E’ possibile usare la direttiva #define del
26
preprocessore per dare un nome ad una costante
con un enunciato
i t di assegnazione
i
#define id_costante
double total=pennies*0.01;
costante
 Ovunque viene usato l’identificatore
l identificatore, il
…
preprocessore provvederà a sostuirlo con la
costante
total=total+ quarters * 0.25;
#define PI 3.14142
 La dichiarazione specifica il tipo, l’assegnazione no
 Una variabile puo’:
 essere definita una volta sola
 Essere
Ess
aggiornata
i n t qu
quante
nt volte
lt si vuole
u l
…
…
double raggio=1;
double raggio=1;
double area=raggio*raggio*PI;
double area=raggio*raggio*3.14142;
 #define non è una istruzione C++ ma una direttiva
per il preprocessore
C++: Introduzione
27
C++: Introduzione
28
Costanti Dichiarate
Comunicazione da Console
 Usando il prefisso const si possono dichiarare delle
costanti appartenenti ad un determinato tipo
esattamente allo stesso modo in cui si dichiarano le
variabili;
La console è l’interfaccia
l’interfaccia base
del calcolatore
Composta da:
…
Tastiera: unità standard di
Tastiera:
input
Video:: unità standard di output
Video
const double lire_per_euro=1937,26;
double valore_in_euro=15,36;
double valore_in_lire=valore_in_euro*lire_per_euro;
…
 Sintassi const nome_tipo nome_variabile=espresssione
 Costanti
C st nti dichiarate
dichi r t sono
s n delle
d ll variabili
v ri bili il cui vvalore
l r
non può essere modificato
devono p
pertanto essere inizializzate al momento della
loro creazione
C++: Introduzione
29
Comunicazione da Console
1.
2.
Sono
S
d
definiti
fi iti iinoltre
lt altri
lt i d
due
flussi – cerr e clog – il cui scopo
è quello di segnalare eventuali
messaggi di errore
30
Output (cout)
C++ le operazioni di input ed
output
p di un programma
p g
vengono gestire da due flussi di
dati (stream
(stream):
):
cin per l’input
l’input (normalmente
assegnato
t alla
ll tastiera)
t ti
)
cout per l’output
l’output (normalmente
diretta al video)
C++: Introduzione
 In C++ l’output
l’output si effettua applicando l’operatore
di inserimento
i
i
t << all flusso
fl
cout.
cout
t.
 << inserisce il valore alla sua destra nel flusso di
dati alla sua sinistra
Costante Stringa
cout << “Frase
Frase di output
output”;;
Programma
C++
cout << 120;;
Usando questi due flussi un
programma può interagire con
un utente mostrando messaggi
sullo schermo e ricevendo
l’input da parte dell’utente dalla
tastiera
31
120
Variabile
cout << x;
C++: Introduzione
Frase di output
Costante Numero
valore di x
C++: Introduzione
32
Output (cout)
Input (cin)
 L’operatore di inserzione << può essere usato più
 In C++ l’input
l’input si effettua applicando l’operatore di
estrazione >> al flusso cin
cin.. L
L’operatore
operatore deve essere
seguito dalla variabile in cui si deve memorizzare il
valore da leggere
volte
lt nella
ll stessa
t
frase
f
cout << “Salve” << “ a “ << “tutti”;
Salve a tutti
 Si
Sintassi
t i
cout << espr. 1 << … << espr. n ;
int numero
cin >> numero;
 Per
P andare
d
a capo bisogna
b
inserire nell flusso
fl
ill
 Il programma attende che l’utente digiti un numero
carattere speciale newline ‘\
‘\n’
cout << “Prima
“P
frase”;
f
”
e prema il tasto “invio”.
Prima fraseSeconda frase
cout << “Seconda frase”;
cout << “Prima frase\n”;
Prima frase
cout << “Seconda
Seconda frase
frase”;;
Seconda frase
C++: Introduzione
L’input
L
input viene elaborato da cin solo dopo aver premuto il
tasto invio
Il valore (costante) introdotto deve essere dello stesso
tipo della variabile
9 Altrimenti lo stream cin fallisce
– Tralasciamo per ora la gestione di queste situazioni
33
C++: Introduzione
Input (cin)
34
Esempio
 L’operatore di inserzione >> può essere usato più
volte
lt nella
ll stessa
t
istruzione
i t
i
cin >> a >> b;
 Si
Sintassi
t i
cin >> var. 1 >> … >> var. n ;
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
int main()
int main()
{
{
int x,y;
cout >> “Inserire il primo numero\n”;
cin >> x;
 L’utente
L’
deve
d
fornire
f
valori
l
di
d tipo appropriato,
int x,y;
cout >> “Inserire i due numeri da sommare
\n”;
cin >> x >> y;
cout >> “Inserire il secondo numero\n”;
uno per variabile
 I valori
l id
devono essere separati
ti da
d uno o più
iù
caratteri spazio/tabulazione/newline
int somma=x+y;
cin >> y;
int somma=x+y;
cout << “Somma= " << somma << "\n";
return 0;
cout << “Somma= " << somma << "\n";
return 0;
}
}
C++: Introduzione
35
C++: Introduzione
36
Esempio
Input (cin)
#include <iostream>
 I valori devono essere separati da uno o più
…
caratteri spazio/tabulazione/newline
cout << "How many dimes do you have? ";
using namespace std;
cin >> a >> b >> c >> d;
cin >> count;
total = count * 0.10 + total;
 E
E’ possibile inserire i dati
 uno dopo l’altro separati da spazi/tab
int main( )
{
y pennies
p
do you
y have? ";
cout << "How many
";
total = count * 0.25 + total;
cin >> count;
double total = count * 0.01;
0 01;
3
6
2
- 4 \n
oppure su righe succesive
cin
6
return 0;
3 \n 6 \n 2 \n - 4 \n
2
}
-4
…
C++: Introduzione
o una loro combinazione
37
Input (cin)
C++: Introduzione
38
Tipo di Dato Fondamentali in C++
 L’input da tastiera è bufferizzato
 I caratteri digitati
d
sono raggruppati tra loro
l
e l’input
l’
viene elaborato quando si preme il tasto invio
coutt << “ Primo
P im num.
m ”;
cin
c
n
3
cout << "Total value = " << total << "\n";
cout << "How many nickels do you have? ";
total = count * 0.05 + total;
3 6 2 -4
4
cin >> count;
int count;
cin >> count;
cout << "How many quarters do you have?
cin
i >> a;;
3
cout << “ Secondo num. “; cin >> b;
6
cout << “ Terzo num. “;
“
2
cin >> c;
cout << “ Quarto num. “; cin >> d;
-4
Nome
byte
y
char
1
Carattere o intero di 8 bit
Signed: -128…127
Unsigned: 0…255
short/
byte
1
Intero di 8 bit
Signed: -128…127
128 127
Unsigned: 0…255
long
4
Intero di 32 bit
3 6 2 -4
4
C++: Introduzione
39
Intervallo
Signed: -2147483648…2147483647
Unsigned: 0
0…4294967295
4294967295
Intero. La sua lunghezza dipende dalla
dimensione di una parola (word) usata
dal sistema.
s stema. Nei
Ne sistemi
s stem a 32
3 bit
b t è di
d 32
3
bit
int
 Che succede digitando direttamente?
Descrizione
float
4
Numero in virgola mobile a singola
precisione
p
±3.4·10±38
double
8
Numero in virgola mobile a doppia
precisione
±1.7·10±308
bool
b l
1
Valori
V l i booleani
b l
i
t
true
e false
f ls
C++: Introduzione
40
Numeri interi in C++
Numeri in virgola mobile in Java
 In C++ tutti i tipi di dati fondamentali per numeri
 In C++ tutti i tipi di dati fondamentali per numeri
interi
i t i usano internamente
i t
t lla rappresentazione
t i
iin
complemento a due
in
i virgola
i
l mobile
bil usano iinternamente
t
t una
rappresentazione binaria codificata dallo standard
internazionale IEEE 754
 float (32bit), double (64 bit)
 La divisione con divisore zero non è un errore se
effettuata tra numeri in virgola mobile
byte int
byte,
int, long
 le condizioni di overflow nelle operazioni
aritmetiche non vengono segnalate
si ottiene semplicemente un risultato errato
 L’unica operazione
p
aritmetica tra numeri interi che
genera un’errore è la divisione per zero
C++: Introduzione
se il dividendo è diverso da zero,, il risultato è infinito
(con il segno del dividendo)
se anche il dividendo è zero, il risultato è indeterminato,
cioè non è un numero,
numero e viene usata la codifica speciale
NaN (Not a Number)
41
C++: Introduzione
Errori di arrotondamento
Arrotondamento
 Gli errori di arrotondamento sono un fenomeno
…
d bl f = 4
double
4.35;
35
cout << setprecision(10) << f;
…
naturale
t
l nell calcolo
l l in
i virgola
i
l mobile
bil eseguito
it con
un numero finito di cifre significative
calcolando 1/3 con due cifre significative
significative, si ottiene 0
0,33
33
moltiplicando 0,33 per 3, si ottiene 0,99 e non 1
4.349999905
 Il numero 4,35 non ha una rappresentazione esatta
nell sistema b
binario, proprio come 1/3 non h
ha una
rappresentazione esatta nel sistema decimale
 Siamo abituati a valutare questi errori pensando
alla rappresentazione dei numeri in base decimale,
ma i computer rappresentano i numeri in virgola
mobile in base binaria e a volte si ottengono dei
risultati inattesi
C++: Introduzione
42
43
4,35
4 35 viene rappresentato con un numero appena inferiore
a 4,35
C++: Introduzione
44
Assegnazioni con Conversione
Assegnazioni con Conversione
…
d bl f
double
f;
int pennies=3;
f=pennies;
p
…
…
d bl f
double
f=2.3;
23
int pennies;
p
pennies=f;
…
 In un’assegnazione, il tipo di dati dell’espressione
dell’espressione e della
variabile
b l a cui la
l si assegna devono
d
essere compatibili
bl
 In questo caso si ha perdita di informazione,
se i tipi non sono compatibili, il compilatore genera un
messaggio
gg di warning
g
perché la parte frazionaria di un valore in virgola
mobile
bil non può
ò essere memorizzata
i
t iin una variabile
i bil
di tipo intero
I tipi non sono compatibili se provocano una possibile perdita
di informazione durante la conversione
 L
L’assegnazione
assegnazione di un valore di tipo numerico intero ad una
variabile di tipo numerico in virgola mobile non può provocare
perdita di informazione
C++: Introduzione
45
C++: Introduzione
Operatore Esplicito di Conversione (casting)
Aritmetica
 Ci sono casi in cui si vuole effettivamente ottenere
 C++ supporta le quattro operazioni elementari
 addizione
dd
e sottrazione: +  moltiplicazione e divisione: * /
la
l conversione
i
di un numero iin virgola
i
l mobile
bil iin un
numero intero
 Lo si fa segnalando al compilatore l’intenzione
l intenzione
esplicita di accettare l’eventuale perdita di
informazione, mediante un “cast”
cast
…
…
double f=2.3;
double f=2.3;
int pennies;
int pennies;
pennies= (int) f;
pennies=static_cast<int> f;
…
…
46
 Le operazioni di moltiplicazione e divisione hanno
precedenza su addizione e sottrazione
a+b/2
b/2
a+(b/2)
(b/2)
 E
E’ possibile usare coppie di parentesi tonde per
indicare in quale ordine valutare le sottosottop
espressioni
C++: Introduzione
(a+b)/2
47
(a+b)/2
C++: Introduzione
48
Aritmetica: Divisione
Funzioni Matematiche
 Se uno dei due operandi è un numero floating point,
 Operazioni più complesse, e.g., la radice quadrata,
il logaritmo vengano realizzare tramite funzioni
il risultato
i lt t e’’ un numero fl
floating
ti point
i t
7.0/4.0
7/4.0
/
double
d
bl x;
cin >> x;
cout
u << sqrt(x);
q ( );
1.75
7.0/4
 Se entrambi
b gli
l operando
d sono interi, ill risultato
l
è
 Sintassi
un intero
7/4
1
nome_funzione (espr1, …,esprn)
 L’operatore modulo % restituisce il resto della
 Calcola il valore della funzione
divisione tra interi
7%4
Le funzioni C++ saranno studiate in dettaglio in seguito
nome_funzione
_
con
argomenti/parametri espr1,…,esprn
3
C++: Introduzione
Si dice che la funzione restituisce (return) il valore
calcolato
49
Esempio
C++: Introduzione
50
C++: Introduzione
52
Funzioni Matematiche
 Per invocare le funzioni matematiche bisogna
Funzione
i l d
includere
il fil
file di iintestazione
t t i
<cmath>
th
#include <iostream>
#include <cmath>
Inclusione del file di intestazione <cmath>
Descrizione
sqrt(x)
radice quadrata di x
pow(x,y)
xy
sin(x)
sin x
cos(x)
cos x
tan(x)
tan x
int x;
exp(x)
ex
cout << “Inserire un numero \n”;
log(x)
logaritmo naturale loge(x), x>0
using namespace std;
int main()
{
cin >> x;
log10(x)
double radice=sqrt(x);
cout << “Radice quadrata= " << radice << "\n";
return 0;
}
C++: Introduzione
51
logaritmo decimale log10(x)
ceil(x)
il più piccolo numero intero ≥x
floor(x)
il più grande numero intero ≤x
fabs(x)
valore assoluto di x
Caratteri
Classi
 Il tipo char permette di memorizzare un carattere
 In C++ una classe e’ un tipo di dato definito
dall’utente
dall
utente
con codifica
difi ASCII ad
d 8 bit
 Tipo: rappresentazione concreta di un concetto
 tipo int e’
e la rappresentazione (approssimata) di un
numero intero
 tipo double e’ la rappresentazione (approssimata) di un
numero reale
char x=‘a’,y;
y=‘b’;
‘b’
 char è un tipo compatibile con int (eredità del C)
 corrisponde
i
d ad
d un b
byte
t
 valore=numero binario corrispodente alla codifica ASCII
del carattere
 ‘a’ ha codifica 01100001, codifica binaria di 97
…
char x=‘a’;
int a=x;
c ut << a;;
cout
…
 In C++ e’ possibile definire nuovi tipi per
1.
97
2
2.
3.
4
4.
C++: Introduzione
rappresentare concretamente:
Stringhe
I i
Impiegati
ti
Conto in Banca
…
53
C++: Introduzione
Classi
Stringhe
 In C++ una classe e’ un tipo di dato definito
 Stringa: Sequenza di caratteri
racchiusa tra doppi apici
d ll’ t t
dall’utente
 Una classe e’ caratterizzata da:
1. Dati
D ti (Attributi)
(Att ib ti)
“Hello”, “a”, “”
I doppi apici non fanno parte
d ll stringa
della
i
 Per usare le stringhe in C++
attributi
#include <iostream>
#include <string>
using namespace std;
int main()
bisogna
g includere il file di
{
intestazione <string>
string nome;
 Dichiarazione, Assegnazione,
string frase=“Inserire un nome\n”;
input ed output simili ai tipi
cout >> frase;
numerici
cin >> nome;
 Il tipo string è il primo esempio
cout << “Ciao
Ciao " << nome << "\n";
\n ;
di classe
l
che incontriamo in C++
2 Funzioni (Comportamento)
2.
 funzioni membro
 Oggetto e’ un’istanza di una classe
 una particolare stringa,
stringa un particolare impiegato,
impiegato etc.
etc
 Interfaccia Pubblica
 Insieme delle funzioni membro accessibili dall’esterno
dall esterno
C++: Introduzione
54
55
stringhe in C++ sono oggetti
in C il tipo string non esiste
9 in C stringhe sono array di
caratteri
return 0;
}
C++: Introduzione
56
Stringhe
Stringhe
 Funzioni membro della classe string
 Invocazione di una funzione membro
1.
funzione membro length( )
saluto.length()
restituisce la lunghezza della stringa (numero di caratteri)
 Sintassi
…
int x;
string
g saluto=“Ciao
u
Mondo\n”;
M
\ ;
x=saluto.lenght( );
cout << saluto << “ è lunga “ << x << “ caratteri\n”;
…
espressione.funzione_membro(espr1, espr2,…,esprn)
 Calcola
C l l il valore
l
della
d ll funzione
f
i
membro
b
funzione_membro con argomenti/parametri
espr1,…,esprn e espressione (parametro implicito)
C++: Introduzione
57
Stringhe
2.
…
string
g saluto=“Ciao Mondo\n”;
string porzione=saluto.substr(2,4);
cout << porzione;
…
C
i
a
o
1
2
3
4
M
o
n
d
o
\n
5
6
7
8
9
10
…
string nome=“Harry”;
strin co
string
cognome=
nome “Potter”
Potter”
string mago=nome + “ “ + cognome;
cout << mago;
g
…
ao M
identico a quello dell’operatore di addizione
 Almeno una delle due stringhe deve essere una
variabile stringa
la posizione dei caratteri nelle stringhe viene numerata a partire
da 0. Perché?
il secondo parametro è la quantità di caratteri (consecutivi) da
estrarre
C++: Introduzione
Harry Potter
 Il simbolo dell’operatore di concatenazione è
il primo parametro è la posizione del primo carattere che si
vuole estrarre
58
 Concatenazione di Stringhe: Operatore +
restituisce una sottostringa
0
C++: Introduzione
Stringhe
funzione membro substr(primo carattere,lunghezza)
Si dice che la funzione restituisce (return) il valore
calcolato
59
C++: Introduzione
60
Classe Impiegato
Classe Impiegato
 Esempio Capitolo 3 (Employee)
 Costruzione
 Rappresentazione di un Impiegato
 Sintassi
1.
Attributi
nome_classe (parametri_costruzione);
name, salary
 Crea una variabile oggetto della classe
nome_classe usando i parametri
parametri_costruzione
parametri costruzione per inizializzarlo
2. Comportamento
 Costruzione
C t
i
 Accesso al nome, stipendio
 Variazione dello stipendio
string get_name( )
 Distruzione
Employee
name
double get
get_salary(
salary( )
void set_salary(double )
Employee(“Fantozzi, Ugo”, 2000);
Employee
name
salary
“Fantozzi, Ugo”
2000
salary
C++: Introduzione
61
Classe Impiegato
C++: Introduzione
62
Classe Impiegato
 Esempio
 Dichiarazione variabile oggetto
 Sintassi
Sint ssi
file di intestazione classe
Employee
#include <iostream.h>
#include “ccc_empl.h”
nome_classe nome_variabile=nome_classe(parametri
costruzione);
using
i namespace std;
d
nome_classe nome_variabile(parametri costruzione);
int main( )
{
Employee fantozzi(“Fantozzi, Ugo”, 2000);
Employee fantozzi=Employee(“Fantozzi, Ugo”, 2000);
Employee fantozzi(“Fantozzi, Ugo”, 2000);
 Definisce una nuova variabile
oggetto della classe nome_classe
usando i parametri
parametri_costruzione
i
i
per
inizializzarlo
fantozzi=
double nuovo_stipendio=fantozzi.get_salary( )-100;
Employee
fantozzi.set_salary(nuovo
f
y(
_stipendio);
p
);
name
salary
“Fantozzi, Ugo”
2000
C++: Introduzione
63
}
cout << “Il nuovo stipendio del dipendente “ << fantozzi.get_name( );
cout << “ è “ << fantozzi.get_salary( ) << “\n”;
return 0;
C++: Introduzione
64