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