• Non ci sono risultati.

Lab Notes 2:

N/A
N/A
Protected

Academic year: 2021

Condividi "Lab Notes 2:"

Copied!
2
0
0

Testo completo

(1)

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)

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

p;

}

Riferimenti

Documenti correlati

Trovate le slides sul sito (secondo progetto, 2014/15) Esiste soluzione con Programmazione Dinamica Esiste anche

i) Il campo elettrico prodotto, sia internamente che esternamente alla sfera, è radiale per la simmetria sferica del problema.. Quale sarà il valore di b affinché la forza

ƒ Meta models are defined on the basis of on simple class modeling concepts and using UML class modeling notation modeling concepts and using UML class modeling notation. Š

Š Peers, peer groups, pipes and other JXTA d t b i l id tifi bl resources need to be uniquely identifiable. Š A JXTA ID uniquely identifies an entity and serves A JXTA ID

Implement a new application that selects all the 2-grams that contain, at any position, the word “like” (i.e., “like” can be either the first or the second word

[r]

Determinare un’espressione per il valore della resistenza RB in modo tale che V CE si mantenga all’incirca costante a 1,65 V al variare della corrente IE tra 200 µA e

In OWL 2, a qualified cardinality restriction allows to express the class of things having for a given property at least, at most or exactly a certain number of values belonging