Fondamenti Fondamenti di Informatica Informatica

Transcript

Fondamenti Fondamenti di Informatica Informatica
Storia del C e C++
Linguaggio C
❍ 1972, nato come evoluzione di due linguaggi
Fondamenti di Informatica
BCPL e B
– Lingaggi senza nozione di “tipo di dati”
❍
C++: Introduzione,
Introduzione, Tipi di Dato Fondamentali
Fondamentali,, Variabili
❍
❍
Dennis Ritchie (Bell Laboratories)
Linguaggio di sviluppo di Unix
Indipendente dall’Hardware
Portabilità
Prof. Francesco Lo Presti
❍
❍
1989: standard approvato
1990: pubblicato standard ANSI e ISO
ANSI/ISO 9899: 1990
Storia del C e C++
2
C++: Introduzione
4
Un Primo Esempio
Linguaggio C++
❍ Inizio anni ‘80: Bjarne Stroustrup (Bell Laboratories)
❍ Estensione del C
❍ Fornisce funzionalità per la programmazione orientata
agli oggetti
// Programma di Esempio
Hello, World!
#include <iostream>
using namespace std;
Oggetti: componenti software riusabili
– Modellano entità del mondo reale
Programmi objectobject-oriented
– Migliore stile di programmazione
– Facilità nel modificare/correggere programmi
❍
C++: Introduzione
int main( ) {
cout << "Hello, World!\n";
return 0;
}
Linguaggio--Ibrido
Linguaggio
Si può usare uno stile CC-like
Si può usare uno stile ObjectObject-oriented
Si possono usare entrambi gli stili
C++: Introduzione
3
Un Primo Esempio
Un Primo Esempio
// Programma di Esempio
Righe che iniziano con // vengono
considerate righe di commento. Non
hanno nessun effetto sul programma
// Programma di Esempio
#include <iostream>
Direttive. Le frasi che iniziano con il
simbolo cancelletto (#) sono direttive
per il preprocessore del compilatore. La
direttiva include richiede l’inclusione del
file iostream.h che contiene le
dichiarazioni delle operazioni basilari di
I/O definite nella libreria standard
#include <iostream>
using namespace std;
int main( ) {
cout << "Hello, World!\n";
return 0;
using namespace std;
int main( ) {
cout << "Hello, World!\n";
return 0;
La funzione main e’ il punto da cui inizia
l’esecuzione di un programma C++
}
istruzioni
Stringa: una sequenza di caratteri
racchiusi tra virgolette “”
Ogni istruzione termina con un
punto e virgola ;
Costante numerica (intero)
}
C++: Introduzione
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).
\n: Escape Sequence
}
Definizione di funzione:
main( ) restituisce un valore intero
I nomi del programma appartengono allo
spazio dei nomi std
5
// Programma di Esempio
Costante stringa
C++: Introduzione
6
Ambiente Integrato di Programmazione
#include <iostream>
using namespace std;
1.
Scrittura del programma
❍
IDE (Integrated
(Integrated Development Environment)
Environment)
❍ Ambiente per la stesura, compilazione e debugging di
programmi
int main()
{
Codice sorgente
2. Compilazione del codice sorgente
❍ File oggetto
cout << "Hello, World!\n";
return 0;
}
3. Collegamento (linking)
❍ “Collega” il codice oggetto con il codice delle librerie
Librerie contengono il codice delle funzioni invocate dal
programma
❍
Codice eseguibile
4. Caricamento ed Esecuzione
Codice
Sorgente
Compilatore
Programma
Oggetto
Linker
Programma
Eseguibile
❍
Librerie
C++: Introduzione
7
Useremo Code::
Code::Blocks
Blocks (link sul sito del corso)
C++: Introduzione
8
…oppure
1.
…oppure
Scrivere il codice usando un semplice editor di
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
❍ Il codice sorgente viola le regole di 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-CompilaCompila-Debug
Modifica del
Programma
Errori Logici: Errori a tempo di esecuzione
❍ Il programma non svolge il compito desiderato
// 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()
{
{
Dichiarazione di variabili
int pennies = 8;
int pennies = 8;
int dimes = 4;
int dimes = 4;
int quarters = 3;
int quarters = 3;
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.25; /* valore totale delle monete */
+ quarters * 0.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 prefissato
❍
‘x’, ‘T’,’1’
Stringhe
“Salve gente”, “Hello, World”, “”, “x”
Numeri interi, Numeri in virgola mobile, Caratteri,
Stringhe
Numeri Interi
❍ Decimali:
❍ Esadecimali
Si premette 0x
75
75
-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 in virgola mobile
❍ Numeri con parte frazionaria e/o fattore esponenziale
3.1456
3.1456
6.02e23
6.02·1023
1.6e-19
1.6·10-19
C++: Introduzione
Variabili
17
memoria, identificati 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
tipo
dimes
Nella definizione di una variabile,
variabile,
quarters
e’ possibile assegnarle un valore
iniziale
total
18
I Nomi delle Variabili
…
int pennies = 8;
Le variabili sono spazi di
C++: Introduzione
Identificatore
Identificatore:: sequenza di lettere, numeri e simbolo di
int dimes = 4;
sottolineatura “_”
int quarters = 3;
…
❍
Deve iniziare con una lettera
❍
Non puo’ essere una parola o simbolo riservato del linguaggio
❍
Non puo’ contenere spazi
5pennies non va bene
Memoria
return non va bene
Pen nies non va bene
Nomi validi
❍
8
❍
4
3
Case sensitive: maiuscole e minuscole vengono considerate
diverse
1.23
C++: Introduzione
pippo, pluto, ciao5, salve_a_tutti
E’ bene scegliere nomi che descrivano adeguatamente il
contenuto della variabile
❍
19
Pippo e pippo 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 a quale tipo di dato essa appartenga
Sintassi
usate nel programma all’interno del loro campo di
validita’ (scope)
❍
nomeTipo nomeVariabile;
E’ possibile dichiare piu’ variabili
nomeTipo nomeVariabile = espressione;
contemporaneamente indicando una sola volta il
tipo
Definire una nuova variabile nomeVariabile
nomeVariabile,, di tipo
nomeTipo nomeVariabile1, …, nomeVariabileN;
nomeTipo, ed eventualmente assegnarle il valore
nomeTipo,
…
iniziale espressione
❍
Altrimenti la variabile
ha un valore iniziale
indefinito
Tratteremo questo aspetto in seguito
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 + dimes * 0.10
+ quarters * 0.25; /* valore totale delle monete */
+ quarters * 0.25; /* valore totale delle monete */
…
C++: Introduzione
…
21
L’Assegnazione
C++: Introduzione
22
L’Assegnazione
Abbiamo visto come i programmi usino le variabili
#include <iostream>
per memorizzare i valori da elaborare e i risultati
dell’elaborazione
Le variabili sono posizioni in memoria che possono
conservare valori di un determinato tipo
Il valore memorizzato in una variabile puo’ essere
inizializzato,, ma anche modificato durante
inizializzato
l’esecuzione di un programma
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;
total viene definito ed
inizializzato
int dimes = 4;
total=total+ dimes * 0.10;
total viene modificato
int quarters = 3;
total=total+ quarters * 0.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
1.23 * 0.25
…
Calcola il valore di espressione e memorizza il
risultato nella posizione di memoria assegnata alla
variabile nomeVariabile
L’assegnazione è un particolare tipo di espressione
pennies
8
dimes
4
quarters
3
total
C++: Introduzione
Memorizza 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 di assegnazione
#define id_costante
double total=pennies*0.01;
costante
Ovunque viene usato 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 aggiornata quante volte si vuole
…
…
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:
Video: unità standard di output
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 dichiarate sono delle variabili il cui valore
non può essere modificato
❍
devono pertanto essere inizializzate al momento della
loro creazione
C++: Introduzione
29
Comunicazione da Console
1.
2.
Sono definiti inoltre altri 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 di un programma
vengono gestire da due flussi di
):
dati (stream
(stream):
cin per l’input
l’input (normalmente
assegnato alla tastiera)
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 << al flusso cout
cout..
<< inserisce il valore alla sua destra nel flusso di
dati alla sua sinistra
Programma
C++
❍
Costante Stringa
cout << “Frase di output”;
❍
Costante Numero
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
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’operatore deve essere
seguito dalla variabile in cui si deve memorizzare il
valore da leggere
volte nella stessa frase
cout << “Salve” << “ a “ << “tutti”;
Salve a tutti
Sintassi
cout << espr. 1 << … << espr. n ;
int numero;
cin >> numero;
Per andare a capo bisogna inserire nel flusso il
Il programma attende che l’utente digiti un numero
carattere speciale newline ‘\
‘\n’
cout << “Prima frase”;
e prema il tasto “invio”.
❍
Prima fraseSeconda frase
cout << “Seconda frase”;
❍
cout << “Prima frase\n”;
Prima frase
cout << “Seconda frase”;
Seconda frase
C++: Introduzione
L’input viene elaborato da cin solo dopo aver premuto il
tasto invio
Il valore (costante) introdotto deve essere dello stesso
tipo della variabile
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 nella stessa istruzione
cin >> a >> b;
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
int main()
int main()
{
{
Sintassi
cin >> var. 1 >> … >> var. n ;
int x,y;
cout << “Inserire il primo numero\n”;
cin >> x;
L’utente deve fornire valori di 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 devono essere separati da uno o più
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? ";
cin >> count;
using namespace std;
cin >> a >> b >> c >> d;
total = count * 0.10 + total;
E’ possibile inserire i dati
❍ uno dopo l’altro separati da spazi/tab
int main( )
cout << "How many quarters do you have?
{
cout << "How many pennies do you have? ";
";
3 6 2 -4
cin >> count;
int count;
total = count * 0.25 + total;
cin >> count;
❍
double total = count * 0.01;
return 0;
2
- 4 \n
cin
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 sono raggruppati tra loro e l’input
viene elaborato quando si preme il tasto invio
cout << “ Primo num. ”;
6
oppure su righe succesive
6
cout << "How many nickels do you have? ";
cin >> count;
3
3
cout << "Total value = " << total << "\n";
total = count * 0.05 + total;
cin
cin >> a;
3
cout << “ Secondo num. “; cin >> b;
6
cout << “ Terzo num. “;
2
cin >> c;
cout << “ Quarto num. “; cin >> d;
-4
Nome
byte
char
1
Carattere o intero di 8 bit
Signed: -128…127
Unsigned: 0…255
short/
byte
1
Intero di 8 bit
Signed: -128…127
Unsigned: 0…255
long
4
Intero di 32 bit
39
Signed: -2147483648…2147483647
Unsigned: 0…4294967295
float
4
Numero in virgola mobile a singola
precisione
±3.4·10±38
double
8
Numero in virgola mobile a doppia
precisione
±1.7·10±308
bool
1
Valori booleani
3 6 2 -4
C++: Introduzione
Intervallo
Intero. La sua lunghezza dipende dalla
dimensione di una parola (word) usata
dal sistema. Nei sistemi a 32 bit è di 32
bit
int
Che succede digitando direttamente?
Descrizione
true e false
C++: Introduzione
40
Numeri interi in C++
Numeri in virgola mobile in C++
In C++ tutti i tipi di dati fondamentali per numeri
In C++ tutti i tipi di dati fondamentali per numeri
interi usano internamente la rappresentazione in
complemento a due
❍
in virgola mobile usano internamente 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, long
le condizioni di overflow nelle operazioni
aritmetiche non vengono segnalate
❍
si ottiene semplicemente un risultato errato
L’unica operazione 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, e viene usata la codifica speciale
NaN (Not a Number)
41
C++: Introduzione
Errori di arrotondamento
Arrotondamento
Gli errori di arrotondamento sono un fenomeno
…
double f = 4.35;
cout << setprecision(10) << f;
…
naturale nel calcolo in virgola mobile eseguito con
un numero finito di cifre significative
❍
❍
calcolando 1/3 con due cifre significative, si ottiene 0,33
moltiplicando 0,33 per 3, si ottiene 0,99 e non 1
4.349999905
Il numero 4,35 non ha una rappresentazione esatta
nel sistema binario, proprio come 1/3 non 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 viene rappresentato con un numero appena inferiore
a 4,35
C++: Introduzione
44
Assegnazioni con Conversione
Assegnazioni con Conversione
…
double f;
int pennies=3;
f=pennies;
…
…
double f=2.3;
int pennies;
pennies=f;
…
In un’assegnazione, il tipo di dati dell’espressione
dell’espressione e della
variabile a cui la si assegna devono essere compatibili
❍
In questo caso si ha perdita di informazione,
se i tipi non sono compatibili, il compilatore genera un
messaggio di warning
perché la parte frazionaria di un valore in virgola
mobile non può essere memorizzata in una variabile
di tipo intero
I tipi non sono compatibili se provocano una possibile perdita
di informazione durante la conversione
L’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 e sottrazione: + ❍ moltiplicazione e divisione: * /
la conversione di un numero in virgola mobile in un
numero intero
Lo si fa segnalando al compilatore l’intenzione
esplicita di accettare l’eventuale perdita di
informazione, mediante un “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
a+(b/2)
E’ possibile usare coppie di parentesi tonde per
indicare in quale ordine valutare le sottosottoespressioni
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 e’ un numero floating point
❍
7.0/4.0
7/4.0
double x;
cin >> x;
cout << sqrt(x);
1.75
7.0/4
Se entrambi gli operando sono interi, il risultato è
Sintassi
un intero
7/4
1
nome_funzione (espr1, …,esprn)
L’operatore modulo % restituisce il resto della
Calcola il valore della funzione nome_funzione con
divisione tra interi
7%4
Le funzioni C++ saranno studiate in dettaglio in seguito
argomenti/parametri espr1
espr1,…,
,…,esprn
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
includere il file di intestazione <cmath>
#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
con codifica ASCII ad 8 bit
Tipo: rappresentazione concreta di un concetto
❍ tipo int e’ la rappresentazione (approssimata) di un
numero intero
❍ tipo double e’ la rappresentazione (approssimata) di un
numero reale
char x=‘a’,y;
y=‘b’;
char è un tipo compatibile con int (eredità del C)
❍ corrisponde ad un byte
❍ valore=numero binario corrispodente alla codifica ASCII
del carattere
❍ ‘a’ ha codifica 01100001, codifica binaria di 97
…
char x=‘a’;
int a=x;
cout << a;
…
In C++ e’ possibile definire nuovi tipi per
1.
97
2.
3.
4.
C++: Introduzione
rappresentare concretamente:
Stringhe
Impiegati
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
dall’utente
Una classe e’ caratterizzata da:
1. Dati (Attributi)
❍
❍
❍
attributi
2. Funzioni (Comportamento)
❍ funzioni membro
Oggetto e’ un’istanza di una classe
❍ una particolare stringa, un particolare impiegato, etc.
Interfaccia Pubblica
❍ Insieme delle funzioni membro accessibili dall’esterno
C++: Introduzione
#include <iostream>
#include <string>
using namespace std;
Per usare le stringhe in C++
int main()
bisogna includere il file di
intestazione <string>
Dichiarazione, Assegnazione,
input ed output simili ai tipi
numerici
Il tipo string è il primo esempio
di classe che incontriamo in C++
{
❍
❍
55
“Hello”, “a”, “”
I doppi apici non fanno parte
della stringa
stringhe in C++ sono oggetti
in C il tipo string non esiste
in C stringhe sono array di
caratteri
54
string nome;
string frase=“Inserire un nome\n”;
cout >> frase;
cin >> nome;
cout << “Ciao " << nome << "\n";
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 saluto=“Ciao Mondo\n”;
x=saluto.lenght( );
cout << saluto << “ è lunga “ << x << “ caratteri\n”;
…
espressione.funzione_membro(espr1, espr2,…,esprn)
Calcola il valore della funzione membro
funzione_membro con argomenti/parametri
espr1,…,
espr1
,…,esprn
esprn e espressione (parametro implicito)
❍
C++: Introduzione
57
Stringhe
2.
…
string 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”;
string cognome=“Potter”;
string mago=nome + “ “ + cognome;
cout << mago;
…
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
2. Comportamento
❍ Costruzione
❍ Accesso al nome, stipendio
❍ Variazione dello stipendio
❍ Distruzione
string get_name( )
nome_classe usando i parametri
parametri_costruzione per inizializzarlo
Employee
name
double get_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
Dichiarazione variabile oggetto
Esempio
Sintassi
file di intestazione classe
Employee
#include <iostream.h>
#include “ccc_empl.h”
nome_classe nome_variabile=nome_classe(parametri
costruzione);
using namespace std;
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 per
inizializzarlo
fantozzi=
double nuovo_stipendio=fantozzi.get_salary( )-100;
Employee
fantozzi.set_salary(nuovo_stipendio);
name
salary
“Fantozzi, Ugo”
cout << “Il nuovo stipendio del dipendente “ << fantozzi.get_name( );
cout << “ è “ << fantozzi.get_salary( ) << “\n”;
return 0;
2000
C++: Introduzione
63
}
C++: Introduzione
64