Caratteristiche principali:
Il C++ possiede alcune caratteristiche (non object-oriented) che i programmatori C possono considerare come migliorie apportate al C. Tra queste:
nuovo formato per i commenti
int cod; // codice personale
nuova gestione I/O (stream)
#include<iostream.h>
void main(void){
cout << "Ciao mondo \\n";
}
iostream.h
anzichè stdio.h
printf
compare una variabile non definita (cout
), un operatore di shift (<<
) e una stringaLe operazioni di input-output avvengono tramite gli stream.
cout
rappresenta lo stream di standard output.
l’operatore <<
trasferisce informazioni da una sorgente ad una destinazione
Si noti l’assenza della descrizione dle formato dell’output ("%d"
).
cin
rappresenta lo stream di standard input
cin>>amount;
nuove regole per i prototipi di funzioni
Il prototipo di una funzione è una dichiarazione contenente solamente: il nome della funzione, il tipo del valore di ritorno, il numero e i tipi dei parametri.
Il C++ esige che le chiamate di funzioni siano precedute dai rispettivi prototipi (o dalle definizioni)
#include<iostream.h>
void display(char* s);
void main(void){display("Ciao");}
void display(char* s){cout<<s;}
argomenti di default
Il prototipo di una funzione C++ può definire dei valori di default per alcuni parametri. Se al momento della chiamata vengono omessi i corrispondenti argomenti, il compilatore utilizza i valori di default.
Dato il prototipo
void myfunc(int i=5, double d=1.23);
si ha allora
myfunc(15,3.23); // uso dei parametri attuali
myfunc(3); // equivale a myfunc(3,1.23)
myfunc(); // equivale a myfunc(5,1.23)
ma non void myFunc(,3.23);
(non si può omettere solo il primo argomento)
posizionamento delle dichiarazioni di variabili
Il C richiede che le variabili vengano dichiarate all’inizio di un blocco.
Il C++ permette di dichiarare variabili in qualunque parte del codice precedente il loro utilizzo.
#include<iostream.h>
void main(void)
{
cout<< "Immettere un valore intero ->\\n";
int amount;
cin>>amount;
for(int i=0;i<amount;i++); cout<<i;
}
variabili di tipo reference
In C++ è possibile avere un nome alternativo per la stessa variabile attraverso la dichiarazione di un “riferimento” (reference)
int actualint;
int &otherint=actualint;
Un rifermento non è una copia della variabile a cui si riferisce, benzì è la stessa variabile sotto altro nome.
In C++ esiste un’opzione aggiuntiva per il passaggio di parametri ad una funzione: la call by reference.
MYTYPE b1;
MYTYPE &b2=b1;
void myfunc(MYTYPE &a);
myfunc(b1);
myfunc(b2);
nuove primitive per la gestione della memoria: new
In C++ la gestione della memoria dinamica avviene tramite le funzioni new
e delete
(sono disponibili ance le malloc
e free
del C)
La funzione new
preleva dallo free store (regione di memoria disponibile in esecuzione — chiamata heap in C) una quantità di byte sufficiente a contenere un dato avente il tipo specificato, restituendo un puntatore “tipato”.
int* pt;
p = new int;
E’ possibile allocare vettori di dati
char* s;
s=new char[DIM];
gestione della memoria: delete
Il rilascio di una zona di memoria allocata dinamicamente tramite new
avviene per mezzo di delete
delete p;
Nel caso di vettori
delete []s;
new
e delete
sono utilizzabili anche nel caso di oggetti definiti dall’utente (l’inizializzazione della memoria associata ad un oggetto in questo caso può avvenire automaticamente).