• Non ci sono risultati.

Lab Notes 1:

N/A
N/A
Protected

Academic year: 2021

Condividi "Lab Notes 1:"

Copied!
3
0
0

Testo completo

(1)

1

Marco Tarini Università dell’Insubria

Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2012/13

Computer Graphics Lab

Notes 1: 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 */

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:

...

};

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:

...

};

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

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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

file "main.c"

file "potenze.c"

Un progetto (in C o C++)

• Schema

#include "potenze.h"

int main(){

int x;

x = potenza(5, 6);

}

int potenza(int b,int e) {

int res=1 , i;

for (i=1; i<=e; i++) { res = res * b;

}

return res;

} file "potenze.h"

int potenza(int b,int e);

#include "potenze.h"

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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Build di un progetto

main.c

potenze.c potenze.h

pre- process.

precomp. file

1 compiler object main.o file

process. pre-

precomp. file

3 compiler object potenze.o file

eseguibile

finale

exec.exe

linker

(2)

2

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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Librerie (linking statico)

eseguibile finale exec.exe linker main.c

sorgenti OpenGL di opengl.h

process. pre-

precomp. file

1 compiler object

main.o file

file di libreria (già compilata) opengl32.lib build

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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Librerie (dinamiche)

linker main.c

sorgenti OpenGL di opengl.h

process. pre- precomp. file

1 compiler object

main.o file

build

file di libreria (già compilata)

opengl32.lib exec

eseguibile finale exec.exe

shared library, es (in windows):

opengl32.dll

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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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) }

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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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();

};

(3)

3

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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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

• Il foglio con il testo, compilato con nome e cognome ed eventualmente numero di matricola, va consegnato assieme alla bella copia.. Non si consegnano

• I due gruppi di domande, intitolati Domande elementari e Domande teoriche, vanno scritti in ordine di comparsa sul foglio del testo e vanno scritti su un foglio diverso dal

• Il foglio con il testo, compilato con nome e cognome ed eventualmente numero di matricola, va consegnato assieme alla bella copia.. Non si consegnano

• per ogni valore di n, fare il grafico dell’errore relativo nel punto x = π/4 + 0.01 in funzione del passo di discretizzazione

Corso di Laurea in Ingegneria Informatica e dell’Automazione Anno Accademico 2011/2012..

Corso di Laurea in Ingegneria Informatica e dell’Automazione Anno Accademico 2011/2012..

Determinarne la soluzione esatta utilizzando l’eliminazione di Gauss; trovare la soluzione iterativa con una precisione di 10 −5 con il metodo di Jacobi e con quello di

Corso di Laurea in Ingegneria Informatica e dell’Automazione Anno Accademico 2012/2013..