Elementi di C++
Elementi di C++ con UML, HTML, Java
Corso di Informatica per la Fisica
per studenti del primo anno del Corso Triennale di FISICA
Adele Rimoldi - Dipartimento di Fisica Nucleare e Teorica Università di Pavia, I
Riepilogo del linguaggio C 14
Struttura di un programma in C 14
Il Preprocessore 15
Il main program 17
Commenti 17
Input/Output 17
I/O: lettura e scrittura 18
I/O: principali funzioni I/O da tastiera 18
I/O: scanf() 19
I/O: lettura e scrittura da file 19
Tipi predefiniti in C 20
Identificatori 21
Dichiarazione 21
typedef 22
Enumeratori 23
Operatori 24
Espressioni di assegnazione 25
Statements 26
Statement composti 26
if 26
while e do-while 27
break e continue 27
switch 28
L’operatore ? 28
Array 29
Puntatori 30
& 30
* 31
Puntatore nullo 32
Puntatori e array 32
Puntatori: allocazione dinamica 33
Regole di conversione e cast 34
Funzioni 34
Prototipi delle funzioni 35
Call-by-Value 35
Call-by-Reference 36
Funzioni esterne 37
struct 37
Accesso ai membri delle strutture 39
Passaggio dei membri di una struct a una funzione 39
Passaggio di una intera struttura ad una funzione 40
Puntatori a strutture 40
Dichiarazione di un puntatore ad una struttura 40
Uso dei puntatori a struttura 40
L’operatore -> 40
C++ come C “migliorato” 42
main program 42
Parametri del programma 43
Organizzazione dei files 44
Stringhe 44
Size e capacity 45
Accesso agli elementi di una stringa 45
iostream 46
Manipolatori 47
fstream 48
stringstream 48
commenti 49
const 49
Riferimenti 50
Riferiementi e Puntatori 50
Scope 50
namespace 51
new e delete 52
Regole di conversione e cast 53
Casting in ANSI C++ 53
Funzioni 54
Funzioni inline 54
Argomenti di default 54
Call by reference 55
Overloading 55
Function signature 55
C++ vs. C: le differenze 56
Classi 57
Linguaggio C e struct 57
Problema: il tipo complesso 57
Metodi 58
Metodi const 59
Modificatori 59
L’ esempio: il tipo complesso 60
Classi 61
struct e class: riepilogo 62
L’ esempio: il tipo complesso 62
Costruttori e distruttori 63
L’ esempio: il tipo complesso 64
Inizializzazione 65
Costruttore di default 65
Costruttore di copia 65
Costruttori ad un parametro 67
Distruttore 67
L’ esempio: il tipo complesso 68
Operatori 68
Regole per la ridefinizione degli operatori 69
Un esempio: l’operatore data
dove number è un file di input che contiene l’informazione che dovrebbe essere digitata sulla tastiera. Naturalmente occorre ricordarsi di aggiungere alla fine del file number un carattere in più a significare la raggiunta fine del file.
La redirezione dell’ I/O non è parte dello standard ANSI C, questo significa che si possono trovare sistemi operativi che non la supportano, anche se nella maggior parte dei casi questo non succede.
►►Il linguaggio C++ supporta l’intero sistema di I/O su file del C. Quindi le trasformazioni di codice da C a C++ non richiedono alcuna variazione per quanto riguarda le routine di I/O del programma.
Tipi predefiniti in C
In C sono definiti una serie di tipi numerici che permettono di rappresentare numeri interi, reali e caratteri.
char (un solo byte) viene normalmente usato per rappresentare interi inferiori a 256. Stringhe e numeri complessi sono implementati come tipi derivati. Non esiste un tipo “logico” a significare “vero” o “falso”. Si utilizza generalmente una macro
#define TRUE 1
#define FALSE 0
int intero in singola precisione
long intero in doppia precisione
float reale in singola precisione
double reale in doppia precisione
long double reale in precisione estesa
unsigned int intero senza segno
unsigned double reale senza segno in doppia precisione
char carattere singolo
esempi di costanti:
123 123 0x123 interi costanti,
decimale, ottale, esadecimale
123l 123u interi, long, unsigned
‘A’ ‘1’ ‘\t’ caratteri, tab
3.14f 3.1415 3.1415L float, double, long double
300°-2 .03°2 30°-1 double, notazione
esponenziale
“Nome” stringa costante
costanti carattere:
‘\a’ alert
‘\\’ backslash
‘\b’ backspace
‘\r’ carriage return
‘\”’ double quote
‘\f’ form feed
‘\t’ tab
‘\n’ newline
‘\0’ carattere nullo
‘\’’ single quote
‘\v’ vertical tab
‘\101’ 101 ottale,
‘A’
‘\x041’ esadecimale, ‘A’
stringhe costanti:
“” stringa nulla (‘\0’)
“nome” ‘n’ ‘o’ ‘m’ ‘e’ ‘\0’
“una \”stringa\”” stampa: una “stringa”
“una stringa \ un \ alla fine della linea
su piu‘ linee” per continuare la stringa
Il numero di bit riservati ad ogni tipo dipende dal microprocessore e dal compilatore impiegati. Come si vede anche dalla tabella un carattere è ad esempio contenuto in un byte nella maggior parte dei casi. Le dimensioni di un intero sono generalmente uguali alle dimensioni di una word nell’ambiente di esecuzione del programma. Negli ambienti a 16 bit, come DOS o Windows 3 un intero è di 16 bit, mentre in ambienti come Windows o NT in genere un intero occupa 32 bit.
►►Il linguaggio C++ aggiunge ai tipi definiti bool e wchar che non hanno uguale in C
Identificatori
I nomi delle variabili, delle funzioni, delle etichette e degli altri oggetti definiti dall’utente sono chiamati genericamente identificatori.
Un identificatore è composto da uno o più caratteri. Il primo carattere deve essere una lettera o un underscore (carattere di sottolineatura). I caratteri successivi possono essere lettere, numeri o underscore. Non esiste un limite in lunghezza, anche se alcuni sistemi si limitano a considerare i primi 31 caratteri
►►Il linguaggio C++ supporta qualsiasi lunghezza per un identificatore, fino a 1024 caratteri; quindi se si deve trasformare un programma dal C al C++ occorre controllare questo aspetto
Gli identificatori che iniziano con un doppio underscore o con un underscore e una lettera maiuscola sono riservati ad usi di sistema. Il C e‘ case sensitive!
int Ntries;
double _attempts;
double 2A; /* errore! */
Dichiarazione
Le dichiarazioni associano un significato ad un identificatore. In C ogni variabile deve essere dichiarata per poter essere usata.
La forma generale di una dichiarazione è:
tipo elenco_variabili;
tipo deve essere un tipo di dati valido in C mentre elenco variabili può essere formato da uno o più nomi di identificatori separati da virgole. Inoltre in C il nome della variabile non ha nulla a che fare con il suo tipo.
int i; /* la variabile i */
double max(double r1,double r2); /* la funzione max */
Una dichiarazione è spesso anche una definizione. Per variabili semplici questo consiste nell’associare un valore alla variabile al momento della dichiarazione */
double pi=3.1415926; /* definizione */
double max(double r1, double r2)
{ /* dichiarazione*/
return (r1>r2) ? r1: r2; /*definizione di max*/
}
Le variabili possono essere definite in tre luoghi diversi:
• all’ interno delle funzioni (variabili locali)
• nella definizione dei parametri delle funzioni
• all’esterno delle funzioni
Le variabili locali possono essere usate solo dalle istruzioni che si trovano all’interno del blocco in cui sono dichiarate. Esse quindi NON sono note all’esterno del proprio blocco di codice che inizia e chiude con una coppia di parentesi graffe. La vita delle variabili locali è legata all’esecuzione del blocco di codice in cui sono dichiarate.
Normalmente si dichiarano le variabili locali all’inizio del blocco di codice, cioè subito dopo la parentesi graffa di apertura della funzione e prima di ogni altra istruzione. Si possono tuttavia dichiarare variabili locali in qualunque altro punto del blocco di codice, per esempio dentro un if. Se una variabile è dichiarata al di fuori di qualsiasi funzione (variabile globale) o localmente ad una funzione.
Le variabili globali essendo note all’intero programma possono essere usate quindi ovunque. Esse conservano inoltre il proprio valore per l’intera esecuzione del programma.
double r; /* r è globale, può essere usata da tutte le funzioni definite in questo file */
main()
{
int i=4; /* dichiarazione e definizione */
double h;
r=3;
h=i*r;
}
typedef
L’istruzione typedef viene utilizzata per creare un alias per tipi esistenti, cioè non si crea un nuovo tipo di dati ma si definisce un nuovo nome ad un tipo di dati preesistente.
Questo processo può essere utile per rendere più trasportabili i programmi dipendenti da una macchina.
La forma generale è la seguente:
typedef tipo nuovonome;
questo nuovo nome si aggiunge a quello preesistente senza sostituirlo.
►►Il linguaggio C++ supporta lo stesso tipo di definizione
typedef int INTEGER; /* per i nostalgici del fortran */
typedef int BOOLEAN; /* un tipo logico */
typedef void (*ptr_f)(); /* ptr_f e` un puntatore ad una procedura (subroutine) */
essa NON può essere usato per implementare nuovi tipi, ma solo per definire un alias.
typedef mela frutto; /* compila soltanto se mela e` gia` stata definita */
Enumeratori
enum è il caso più semplice di un tipo definito dall’utente (è assimilabile ad un tipo intero).
Essa è formata da un gruppo di costanti intere dotate di un nome che specificano tutti i valori consentiti per una variabile di tale tipo.
La forma generale delle enumerazioni è la seguente:
enum nome_tipo_enumerativo {elenco enumerazioni} elenco_variabili;
gli esempi sono riportati nei due riquadri sottostanti.
enum Color
{
red, green=10, blue
};
Color screenColor = blue;
Color windorColor = red;
int n = blue; /* valido */
Color c = 1; /* errore */
enum Seme
{
cuori, picche, quadri, fiori
};
Il nome del tipo enumerativo può essere utilizzato per dichiarare variabili di tale tipo. In C la seguente riga
enum coin money;
Dichiara money come una variabile di tipo coin.
►►Il linguaggio C++ semplifica invece la definizione per cui la stessa variabile può essere dichiarata con la seguente forma abbreviata:
coin money;
Il fattore chiave per capire una enumerazione è che ad ognuno dei simboli corrisponde un valore intero.
Questi valori possono quindi essere utilizzati in qualunque punto si potrebbe utilizzare un intero. Ad ogni simbolo viene assegnato un valore maggiore di una unità rispetto al simbolo precedente. Il valore del primo simbolo dell’enumerazione è 0.
Quindi:
printf(“%d %d”, cuori, quadri);
visualizza i valori 0 e 2.
I valori di uno o più simboli possono essere esplicitati tramite un inizializzatore. Nell’esempio precedente green è posto a 10. inoltre va ricordato che cuori è il nome di un intero, non di una stringa.
Operatori
Esistono quattro classi principali di operatori in C
►►Il linguaggio C++ si comporta in ugual modo per quanto riguarda gli operatori.
Espressioni aritmetiche
-i +w piu` e meno unari
a*b a/b i%2 moltiplicazione,
divisione, modulo
a+b a-b addizione e
sottrazione binarie
a=3; assegnazione
auto-incremento esperessione
e decremento
k = ++j; j=j+1; k=j;
k = j++; k=j; j=j+1;
k = --j; j=j-1; k=j;
k = j--; k=j; j=j-1;
Gli operatori di incremento e di decremento si comportano diversamente a seconda che l’operatore preceda o segua l’operando.
Se l’operatore precede l’ operando il C esegue l’incremento o il decremento prima di fornire il valore dell’operando all’espressione.
Se invece l’operatore segue il C fornisce il valore dell’operando e poi lo incrementa o decrementa.
x=10;
y= ++x;
assegna ad y il valore 11
x=10;
y= x++;
a y viene assegnato il valore 10.
operatori relazionali
< minore di .LT.
> maggiore di .GT.
= maggiore o uguale .GE.
== uguale .EQ.
!= diverso .NE.
! Negazione unaria .NOT.
&& and logico .AND.
|| or logico .OR.
bit-wise
~i; Complemento bit a bit
i&j; AND bit a bit
i|j OR bit a bit
i^j XOR bit a bit
in shift a destra di n pos.
Espressioni di assegnazione
Le espressioni di assegnazione sono valutate da destra a sinistra
a = j++;
j viene assegnato ad a ed in seguito incrementato
Le assegnazioni multiple sono permesse
a = b = c = d = 100;
alcuni operatori di assegnazione combinano assegnazione ed altri operatori.
a *= b; /* equivale ad a = a*b; */
a -= b; /* equivale ad a = a-b; */
Assegnazioni possono essere fatte all’interno di espressioni aritmetiche
a = b + ( c = 3 ); /* equivale a c=3; a=b+c; */
Statements
Le tabelle seguenti indicano una sintesi di statement comuni a partire dal più semplice (quello vuoto costituito solo dal carattere finale di linea (;) agli altri più articolati.
vuoto ;
espressione j=j+k;
composto { . . . . } usato in funzioni, if.. Costituisce un blocco
goto goto label; da non usarsi
if if (p==0)
cerr ................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related searches
- c reactive protein level 30
- c reactive protein level chart
- does emergen c work
- is emergen c good for you
- c words to describe someone
- c reactive protein high
- c reactive protein high treatment
- c reactive protein elevated autoimmune
- does emergen c really work
- what is c reactive protein levels mean
- high c reactive protein autoimmune
- c c international group