1
Marco Tarini
Università dell’Insubria
Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2011/12
Computer Graphics Lab
Notes 2: da Java a C++
C++
in C… (ripasso)
void pippo(int i);
/* dichiarazione della funz pippo */
void pippo(int i){
printf(“Ciao %d”,i);
} /* definizione della funz pippo */
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
file foo.h file foo.c
file main.c
#include “foo.h”
void main(){
pippo(10);
}
precompilatore
(operaz. meramente sintattiche)
in C++ (OO!)
class Foo{
public:
void pippo(int i) { printf(“Ciao %d”,i);
} private:
...
};
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
file foo.h
file main.c
#include “foo.h”
void main(){
Foo f;
f.pippo(10);
}
si può separare dichiarazione da definizione
class Foo{
public:
void pippo(int i);
// dichiaraz. metodo pippo // (di Foo)
private:
...
};
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
file foo.h
file main.c
#include “foo.h”
void main(){
Foo f;
f.pippo(10);
}
file foo.cpp (implementazione)
#include “foo.h”
void Foo::pippo(int i){
printf(“Ciao %d”,i);
}
// definiz. metodo pippo di Foo
Passaggio di parametri in C (ripasso)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
void pippo_a(int i){ /* i passato per copia */
i = i+5;
}
void pippo_b(int
*i){ /* i passato per COPIA, di puntatore */*i = (*i)+5;
}
int main(){
int x = 5;
pippo_a(x); // x non cambia pippo_b(&x); // x cambia (diventa 10) }
Passaggio di parametri in C++
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
void pippo_a(int i){ /* i passato per copia */
i = i+5;
}
void pippo_b(int
*i){ /* i passato per COPIA, di puntatore */*i = (*i)+5;
}
void pippo_c(int
&i){ /* i passato per riferimento */i = i+5;
}
int main(){
int x = 5;
pippo_a(x); // x non cambia
pippo_b(&x); // x cambia (diventa 10)
pippo_c(x); // x cambia (diventa 15)
}
2
Passaggio di parametri in C++
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
void pippo_a(int i){ /* i passato per copia */
i = i+5;
}
void pippo_b(const int *i){ /* i passato per COPIA, di puntatore */
*i = (*i)+5;
}
void pippo_c(const int &i){ /* i passato per riferimento */
i = i+5;
}
int main(){
int x = 5;
pippo_a(x); // x non cambia pippo_b(&x); // x cambia (diventa 10) pippo_c(x); // x cambia (diventa 15) }
“giuro che non lo cambio”
// ERRORE di compilaz
// ERRORE di compilaz
Specializzazione in C++
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
class Persona {
public:
Persona() { } int eta;
};
class Studente : public class Persona { public:
Studente() : Persona() { matricola = …;
}
int matricola;
int contaEsami();
};
Specializzazione in C++
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
class Persona {
public:
Persona() { } int eta;
};
class Studente : public class Persona { public:
Studente();
int matricola;
int contaEsami();
};
Studente::Studente() : Persona() { /* implementaz costruttore */
matricola = …
… }
int Studente::contaEsami(){
/* implementaz metodo contaEsami */
… }
file Header (.h)
file cpp
Specializzazione in C++
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
class Persona {
public:
Persona() { };
int eta;
};
class Studente : public class Persona { public:
Studente();
int matricola;
int contaEsami() const;
};
Studente::Studente() : Persona() { /* implementaz costruttore */
matricola = …
… }
int Studente::contaEsami() const{
/* implementaz metodo contaEsami */
… }
file Header (.h)
file .cpp
“giuro che non cambio me stesso ”
C++: puntatori
• T
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
class Persona {
public:
Persona(int eta) {
annoNascita = ANNO_CORRENTE - eta;
}
int eta() const {
return annoNascita – ANNO_CORRENTE;
}
int annoNascita;
};
void main(){
Persona pers(29);
pers.annoNascita = 1982;
Persona *pers2 = NULL;
pers2 = &pers;
pers2->annoNascita = 1985;
}
C++: puntatori: new e delete
• T
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
class Persona {
public:
Persona(int eta) {
annoNascita = ANNO_CORRENTE - eta;
}
int eta() const {
return annoNascita – ANNO_CORRENTE;
}
int annoNascita;
};
void main(){
Persona* p = new Persona(22);
printf(“Anni: %d” , p->eta() );
delete