Programmazione ad Oggetti C++_03-b
Transcript
Programmazione ad Oggetti C++_03-b
Programmazione ad Oggetti C++ A5160039 Gianluigi Ciocca A.A. 2007-2008 Sommario La funzione Main IO di base I tipi di dati Programmazione ad Oggetti C++ 2 1 Il linguaggio C++ Funzione Main L’entry point del programma è una funzione globale “main” Deve esistere una ed una sola funzione main In un qualunque file .cpp Può avere diverse forme Diversi parametri in input Deve ritornare un int // Funzione main che non prende parametri int main() // o main(void) { // corpo del programma return 0; // 0 se non ci sono errori // >0 altrimenti } Programmazione ad Oggetti C++ 3 Il linguaggio C++ Input/Output base (std::cout) “Hello World” in C++ Scriviamo il testo su console ‘std::cout’ è un oggetto predefinito nel file <iostream> std è un namespace Serve per scrivere sullo standard output (console) Si usa l’operatore ‘<<’ /* Il classico dei classici “Hello World” */ #include <iostream> int main() { std::cout << “Hello World”; //output su console return 0; } Programmazione ad Oggetti C++ 4 2 Il linguaggio C++ Input/Output base (std::cin) Input da tastiera ‘std::cin’ è un oggetto predefinito nel file <iostream> Serve per leggere dallo standard input (tastiera) Si usa l’operatore ‘>>’ #include <iostream> int main() { int numero; std::cin >> numero; // input da console std::cout << “Il Numero inserito e’ : ” << numero << std::endl; return 0; } Programmazione ad Oggetti C++ 5 Il linguaggio C++ Input/Output base (std::cerr) Output d’errore ‘std::cerr’ è un oggetto predefinito nel file <iostream> Serve per scrivere sullo standard error stream (console) Si usa l’operatore ‘<<’ #include <iostream> int main() { std::cerr << “Errore!”; //output su console return 0; } Programmazione ad Oggetti C++ 6 3 Il linguaggio C++ Rimuovere il namespace ‘std::’ Utilizzare “using namespace std;” Simile ad un “import std;” di JAVA #include <iostream> using namespace std; int main() { int numero; cout << “Inserire un numero : ”; cin >> numero; cout << “La meta’ del numero inserito e’ : ”<< numero/2.0 << endl; return 0; } Programmazione ad Oggetti C++ 7 Le librerie del C++ Standard I file header delle librerie C <math.h> / <string.h> / ... I file header delle librerie C -> C++ <cmath> / <cstring> / ... I file header delle librerie C++ <iostream> / <string> / ... Programmazione ad Oggetti C++ 8 4 Le librerie del C++ Standard Template Library Containers Algoritmi generici sui containers Iteratori I file header della STL <vector> / <algorithm> / ... Programmazione ad Oggetti C++ 9 Programmazione ad Oggetti C++ A5160039 Gianluigi Ciocca A.A. 2007-2008 5 Tipi di dati Built-in semplici bool /* Quale è la dimensioni dei tipi semplici? */ booleano int i, j; // senza inizializzazione char cout<<sizeof(int)<<endl; singolo byte cout<<sizeof(i)<<endl; int // char intero char c=‘y’; // inizializzazione float // Literals reale singola precisione double reale doppia precisione 10 // 10 int 10.5 // 10.5 double 10.5f // 10.5 float 0x0120 // esadecimale (288) Programmazione ad Oggetti C++ 11 Tipi di dati Built-in semplici: modificatori unsigned int ui; unsigned Elimina il segno dai tipi char, int unsigned char c=-1; long int li; short int si; long short s; Estende la precisione dei tipi int e double Può essere usato al posto di long int // Literals 10l // 10 long int short Riduce la precisione del tipo int Può essere usato al posto di short int Programmazione ad Oggetti C++ 12 6 Tipi di dati Built-in semplici - Range * *Esempi. Dipendono dal sistema target. long int deve avere dimensione (e quindi range) di almeno un int. Analogamente per long double. Programmazione ad Oggetti C++ 13 Tipi di dati Puntatori (1) Puntatore Riferimento ad un indirizzo (accesso indiretto ad un dato) Contiene indirizzo dove trovare un dato di un certo tipo 0: tipo *nome_variabile; 1 int *p; 2 int *p=0; // o =NULL definito in <stdlib.h> 3 int intero=123; 4 int *ptr=&intero; // &var = indirizzo di var 5 int v=*ptr; // dereferenziamento ( v=123 ) 6 (*ptr)++: // intero=124; // senza inizializzazione 0 p ??? XYZ: intero 123 ptr XYZ: Programmazione ad Oggetti C++ 14 7 Tipi di dati Puntatori (2) int intero=123; Aritmetica dei puntatori Somma e sottrazione di numeri interi int *ptr=&intero; int *ptr2=ptr+2; ptr+2 (ptr puntatore a int) Spostarsi al 2° intero dopo quello puntato da ptr Aggiornare indirizzo per puntare al 2° intero dopo… – Sommare 8 bytes ( 2 x sizeof(int) ) all’indirizzo contenuto in ptr XYZ: intero 123 ptr XYZ: ptr2 XYZ:+2*sizeof(int) Programmazione ad Oggetti C++ 15 Tipi di dati Puntatori (3) T *p Tramite il puntatore, tratto la memoria come se fosse fatta solo di oggetti di tipo T int intero=123; int *ptr=&intero; int *ptr2=ptr+200000; // Attenzione!!!! Memoria Programmazione ad Oggetti C++ 16 8 Tipi di dati Puntatori (4) PQR: 1 int *p1, p2; // p2 non è un puntatore 2 int *p1,*p2; // p1 e p2 puntatori 3 p1--; 4 p1+p2; // Errore 5 p2-p1; // Ok (numero di elementi tra p2 e p1) 6 p1=p2; p1=NULL; 123 XYZ: PQR: // Ok p 7 // Riassegnabilità int **p; // Puntatore a puntatore a interi XYZ: short short i=100; *q=&i; short **p=&q; 8 double d; int *pi=&d; // Errore Programmazione ad Oggetti C++ 17 Tipi di dati Puntatori (5) Puntatore a void (da evitare!) int i; double d; 1 void *pvi=&i; // Ok 2 void *pvd=&d; // Ok 3 pvi++; // Errore 4 *pvi; 5 *((int*)(pvi)); // Ok cast + dererefenziamento 6 *((int*)(pvd)); // Ok cast + dereferenziamento ATTENZIONE!!!! // Errore Programmazione ad Oggetti C++ 18 9 Tipi di dati Puntatori (6) Puntatori a funzione (globale) tipo_ritorno (*nome_ptrFunct)(params); 1 void f1(void){...} void f2(void){...} void f3(void){...} 2 double g(double d, int i){...}; 3 void (*fptr)(void); fptr=&f1; 4 double (*gptr)(double, int)=&g; gptr=&f1; // Errore 5 if ( i>100 ) fptr=&f2; else fptr=&f3; 6 fptr(); // uso la funzione 7 fptr++; // Errore Programmazione ad Oggetti C++ 19 Tipi di dati Puntatori (7) Puntatori a funzione (globale) float * ( * ( *SUPER )( int,int,float ) ) (int); SUPER è… …un puntatore a funzione… …che prende (int,int,float) come parametri e… …ritorna un puntatore a funzione… …che prende (int) come parametri e… …ritorna un puntatore a float!! Programmazione ad Oggetti C++ 20 10 Tipi di dati Puntatori (8) Segmentation Fault P1 Access Violation Locazione non valida P2 P3 Programmazione ad Oggetti C++ 21 11