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