Ereditarietà. Nel secondo caso, invece, si è in presenza di un gerarchia di classi: classe derivata1 classe derivata2
|
|
- Ugo Conte
- 5 anni fa
- Visualizzazioni
Transcript
1 Ereditarietà
2 Indice L ereditarietà L ereditarietà di tipo public Costruttori e distruttori Ereditarietà e composizione L ereditarietà di tipo private e protected L overriding L ereditarietà multipla Casting
3 Ereditarietà L ereditarietà è lo strumento che permette di costruire nuove classi, dette classi derivate, a partire da classi già esistenti (classi base) favorendo in tal modo il riutilizzo del codice. In generale, quando viene stabilita una relazione di ereditarietà fra due classi, la classe derivata conterrà in sé i dati e le funzioni membro della classe base. Alcuni metodi, tuttavia, non possono essere ereditati automaticamente. Parliamo di ereditarietà singola, quando la classe base è unica, e di ereditarietà multipla quando, al contrario, una classe derivata è costruita a partire da almeno due classi base. Possiamo distinguere tra ereditarietà diretta o indiretta tra due classi. Nel primo caso una classe derivata eredita il contenuto della classe base senza passaggi intermedi: classe base classe derivata Nel secondo caso, invece, si è in presenza di un gerarchia di classi: classe base classe derivata1 classe derivata2
4 Ereditarietà Da un punto di vista sintattico, nell ereditarietà diretta il nome della classe base compare esplicitamente nella porzione di codice relativa alla classe derivata. Il C++, inoltre, mette a disposizione tre diverse tipologie di ereditarietà: public, protected e private. L ereditarietà di tipo public è di gran lunga la più usata. Nell ereditarietà di tipo public, un oggetto di una classe derivata può essere visto come un istanza particolare della classe base. Non è vero, invece, il contrario. L ereditarietà fornisce un alternativa alla composizione dove un oggetto di una classe viene trattato come dato membro di un altra classe. Il risultato che si ottiene con queste due diverse modalità di programmazione è sostanzialmente lo stesso.
5 Ereditarietà Animale Classe base Carnivoro Classi derivate Erbivoro Leone Lupo Gatto Pecora Tartaruga Classi derivate Classi derivate
6 Ereditarietà Animale attributi: nome età colore metodi: svegliarsi() muoversi() fermarsi() nutrirsi() dormire() setnome() getnome() Animale() is-a Carnivoro attributi: prede numerodenti metodi: cacciare() setprede() getprede() Carnivoro()
7 Ereditarietà Carnivoro attributi: nome età colore prede numerodenti metodi: svegliarsi() muoversi() fermarsi() nutrirsi() dormire() setnome() getnome() cacciare() setprede() getprede() Carnivoro() is-a Gatto attributi: razza metodi: miagolare() setrazza() getrazza() Gatto()
8 Ereditarietà Gatto attributi: nome età colore prede numerodenti razza metodi: svegliarsi() muoversi() fermarsi() nutrirsi() dormire() setnome() getnome() cacciare() setprede() getprede() miagolare() setrazza() getrazza() Gatto()
9 L'ereditarietà di tipo public La dichiarazione di ereditarietà di tipo public si avvale della seguente sintassi: }; class nome_classe_derivata : public nome_classe_base{ corpo della classe derivata; Nell eredità di tipo public, la classe derivata vede i membri public e protected della classe base ancora come public e protected: essi restano direttamente accessibili rispettivamente dall esterno e dalle altre classi derivate (basta cioè invocarne il nome). I membri private della classe base possono essere acceduti solo attraverso i metodi public e protected della classe base stessa: non sono direttamente accessibili dalla classe derivata.
10 L'ereditarietà di tipo public Le funzioni friend della classe base non sono ereditate, essendo definite al di fuori della classe base. Con l attributo protected si identificano quei membri della classe base che sono direttamente accessibili dalle classi derivate, ma non dall esterno (in questo caso bisognerà ricorrere a metodi public o funzioni friend della classe base). L ereditarietà di tipo public permette di trattare un oggetto della classe derivata come un particolare oggetto della classe base.
11 L'ereditarietà di tipo public Classe Base Classe Derivata Private base Protected base is-a public Private dt Protected dt Public base Public dt
12 L'ereditarietà di tipo public Classe Derivata Private base Accesso diretto Protected base Public base programma Private dt Protected dt Public dt
13 L'ereditarietà di tipo public Classe Derivata Private base Accesso diretto Protected base Public base Altre classi derivate Private dt Protected dt Public dt
14 Esempio esempio: sintassi nell ereditarietà di tipo public // file base.h class Base{ private: int num1; protected: int num2; public: Base(){num1=0; num2=0;} void setnum1(int i){ num1=i; } void setnum2(int i){ num2=i; } int getnum1(){ return num1; } int getnum2(){ return num2; } }; derivata num1 num2 getnum1() num3 others sum; }; }
15 Esempio // file derivata.h #include "base.h" class Derivata: public Base{ private: int num3; public: Derivata(){ num3=0; } void setnum3(int i){ num3=i;} int getnum3(){ return num3;} int somma(){ int sum; sum=num3+num2+getnum1(); return }
16 // file main.cpp Esempio #include<iostream> #include "derivata.h" using namespace std; int main(){ Base b; Derivata d; b.setnum1(1); b.setnum2(2); d.setnum1(4); d.setnum2(5); d.setnum3(6); cout << "Size of b: " << sizeof(b) << endl; cout << "Size of d: " << sizeof(d) << endl; cout << "b->num1: " << b.getnum1() << " Num2: " << b.getnum2() << endl; cout << "d->num1: " << d.getnum1() << " Num2: " << d.getnum2() << " Num3: " << d.getnum3() << endl; cout << "Sum: " << d.somma() << endl; return 0; }
17 Esempio Output: Size of b: 8 Size of d: 12 b->num1: 1 Num2: 2 d->num1: 4 Num2: 5 Num3: 6 Sum: 15 (4 byte * 2 int) (4 byte * 3 int)
18 Costruttori e Distruttori nelle classi derivate In mancanza dell inizializzatore di membro, viene chiamato implicitamente il costruttore di default della classe base. Una classe derivata eredita gli attributi della classe base, quindi, quando viene istanziato un oggetto della classe derivata è necessario chiamare il costruttore della classe base. Questa operazione viene eseguita tramite un inizializzatore della classe base, realizzato secondo la sintassi: nome_classe_derivata(argomenti_ereditati,argomenti_propri) : nome_classe_base(argomenti_ereditati); Nel prototipo del costruttore della classe derivata gli argomenti ereditati possono anche seguire gli argomenti propri.
19 Costruttori e Distruttori nelle classi derivate I costruttori e gli operatori di assegnamento della classe base non sono ereditati dalle classi derivate ma possono essere invocati, rispettivamente, dai costruttori e dagli operatori di assegnamento delle classi derivate stesse. Quando vengono creati oggetti di una classe derivata, per primi sono chiamati i costruttori della classe base, poi quelli della classe derivata. I distruttori sono chiamati in ordine inverso.
20 Esempio // file base.h #include<iostream> using namespace std; class Base{ private: int num1; protected: int num2; public: Base(int i1, int i2){ num1=i1; num2=i2; cout << "Costruttore Base: " << num1 << " " << num2 << endl;} ~Base(){ cout << "Distruttore Base: " << num1 << " " << num2 << endl;} void setnum1(int i){ num1=i; } void setnum2(int i){ num2=i; } int getnum1(){ return num1; } int getnum2(){ return num2; } };
21 // file derivata.h #include "base.h" Esempio class Derivata: public Base{ private: int num3; public: Derivata(int i1, int i2, int i3):base(i1,i2){ num3=i3; cout << "Costruttore Derivata: " << num3 << endl; } ~Derivata(){ cout << "Distruttore Derivata: " << num3 << endl; } void setnum3(int i){ num3=i;} int getnum3(){ return num3;} int somma(){ int sum; sum=num3+num2+getnum1(); return sum; }};
22 Esempio // file main.cpp #include "derivata.h" int main(){ Base b(4,5); Derivata d(b.getnum1(),b.getnum2(),6); cout << "Size of b: " << sizeof(b) << endl; cout << "Size of d: " << sizeof(d) << endl; cout << "Num1: " << d.getnum1() << endl; cout << "Num2: " << d.getnum2() << endl; cout << "Num3: " << d.getnum3() << endl; cout << "Sum: " << d.somma() << endl; return 0; }
23 output: Costruttore Base: 4 5 Costruttore Base: 4 5 Costruttore Derivata: 6 Size of b: 8 Size of d: 12 Num1: 4 Num2: 5 Num3: 6 Sum: 15 Distruttore Derivata: 6 Distruttore Base: 4 5 Distruttore Base: 4 5 Esempio
24 Ereditarietà e composizione Composizione ed ereditarietà rappresentano le due modalità per costruire una nuova classe ponendo al suo interno attributi e metodi di un altra classe. Le istanze della nuova classe vengono a contenere un sottooggetto. Entrambe utilizzano una procedura di inizializzazione del costruttore per assegnare valori agli attributi del sotto-oggetto. L ereditarietà appare più versatile. Si ricorre alla composizione qualora si sia principalmente interessati agli attributi del sotto-oggetto piuttosto che alla sua interfaccia pubblica. Dichiarando private il sotto-oggetto, l utente della nuova classe viene forzato a non usare i metodi public del sottooggetto stesso. L ereditarietà definisce una relazione is-a tra due classi; la composizione, invece, una relazione has-a.
25 Esempio Esempio: composizione // file base.h class Base{ private: int num1; int num2; public: Base(int i1, int i2){num1=i1; num2=i2;} void setnum1(int i){ num1=i; } void setnum2(int i){ num2=i; } int getnum1(){ return num1; } int getnum2(){ return num2; } };
26 Esempio // file derivata.h #include "base.h" class Derivata{ private: Base b; int num3; public: Derivata(int i1, int i2, int i3):b(i1,i2){num3=i3;} void setnum3(int i3){num3=i3;} int getnum3(){return num3;} int somma(){ int sum; sum=num3+b.getnum2()+b.getnum1(); return sum; } };
27 // file main.cpp #include<iostream> #include "derivata.h" using namespace std; Esempio int main(){ Derivata d(4,5,6); cout << "Size of d: " << sizeof(d) << endl; cout << "d->num3: " << d.getnum3() << endl; cout << "Sum: " << d.somma() << endl; return 0; } Output: Size of d: 12 d->num3: 6 Sum: 15
28 Un altro esempio di eredità pubblica is-a Center attributi: x y metodi: getx() gety() Center() ~Center() is-a Circle attributi: radius metodi: getradius() area() Circle() ~Circle()
29 Esempio: center.h #ifndef CENTER_H #define CENTER_H #include<iostream> using namespace std; class Center{ friend ostream& operator<<( ostream&, const Center& ); private: int x,y; public: Center(int=0, int=0); ~Center(){}; int getx() const {return x;} int gety() const {return y;} }; Center::Center(int x_pt, int y_pt){ x = x_pt; y = y_pt; } ostream& operator<<(ostream& output, const Center& ctr){ output << "The center is: " << "(" << ctr.x << "," << ctr.y << ")" << endl; return output; } #endif
30 Esempio: circle.h #ifndef CIRCLE_H #define CIRCLE_H #include "center.h" #include "math.h" class Circle : public Center{ friend ostream& operator<<(ostream&, const Circle&); private: double radius; public: Circle(double=0.0, int=0, int=0); ~Circle(){}; double area() const {return *pow(radius,2);} }; Circle::Circle(double rad, int x_p, int y_p): Center(x_p, y_p){ radius = rad; } ostream& operator<<(ostream& output, const Circle& cir){ output << static_cast<center>(cir) ; output << "The circle has radius = " << cir.radius << " and area= " << cir.area() << endl; return output; }#endif
31 che richiama automaticamente l overloading dell operatore << per la classe Center e di conseguenza permette di stampare su standard output la sola parte dell oggetto cir ereditata dalla sua classe base (il sotto-oggetto), ovvero il suo centro. Esempio //file main.cpp #include "circle.h" int main(){ Center centro(2,7); Circle cerchio(3.2, centro.getx(), centro.gety()); cout << cerchio; return 0; } Output The center is: (2,7) The circle has radius = 3.2 and area= Sfruttando il fatto che un oggetto della classe derivata Circle è un (is-a) oggetto della classe base Center abbiamo potuto usare, all interno del file circle.h, l istruzione: output << static_cast<center>(cir);
32 L'eredità di tipo private La dichiarazione di ereditarietà di tipo private è del tutto analoga a quella di tipo public: nome_classe_derivata : private nome_classe_base{ }; corpo della classe derivata; Nell eredità di tipo private, la classe derivata vede sia i membri public che quelli protected della classe base come private: essi sono accessibili direttamente solo dall interno della classe derivata. I membri private della classe base non sono invece, direttamente accessibili dalla classe derivata. L ereditarietà di tipo private è un procedimento del tutto analogo alla composizione perché vieta all utente di utilizzare i metodi della classe base tramite gli oggetti della classe derivata dal momento che quest ultima li tratta come private.
33 L'eredità di tipo private Classe Base Classe Derivata Private base Protected base is-a private Private dt Protected dt Public base Public dt
34 L'eredità di tipo private Classe Derivata Private base Protected base Public base Private dt Accesso diretto programma Protected dt Public dt
35 L'eredità di tipo private Classe Derivata Private base Protected base Accesso diretto Public base Private dt Altre classi derivate Protected dt Public dt
36 Esempio esempio: sintassi nell ereditarietà di tipo private // file base.h class Base{ private: int num1; protected: int num2; public: Base(){num1=0; num2=0;} void setnum1(int i){ num1=i; } void setnum2(int i){ num2=i; } int getnum1(){ return num1; } int getnum2(){ return num2; } }; derivata num1 num2 getnum1() num3 others };
37 // file derivata.h #include "base.h" #include<iostream> using namespace std; class Derivata: private Base{ } private: int num3; public: Esempio Derivata(int i1, int i2){setnum1(i1); setnum2(i2); num3=0; void setnum3(int i){num3=i;} int getnum3(){return num3;} void printbasecomp(){ cout << "d->num1: " << getnum1() << " Num2: " << num2 << endl;} int somma(){int sum; sum=num3+num2+getnum1(); return sum;}
38 Esempio // file main.cpp #include "derivata.h" int main(){ Derivata d(4,5); d.setnum3(6); cout << "Size of d: " << sizeof(d) << endl; d.printbasecomp(); cout << "d->num3: " << d.getnum3() << endl; cout << "Sum: " << d.somma() << endl; return 0; } Output: Size of d: 12 d->num1: 4 Num2: 5 d->num3: 6 Sum: 15
39 Esempio Per rendere visibili all utente attributi o metodi della classe base è sufficiente riscrivere il loro nome (preceduto da quello della classe base e dall operatore ::) nell interfaccia pubblica della classe derivata. // file derivata.h // la funzione printbasecomp() non serve più #include "base.h" #include<iostream> using namespace std; class Derivata: private Base{ private: int num3; public: Derivata(int i1, int i2){ setnum1(i1); setnum2(i2); num3=0; } void setnum3(int i){num3=i;} int getnum3(){return num3;} Base::getNum1; Base::getNum2; int somma(){ int sum; sum=num3+num2+getnum1(); return sum; }};
40 // file main.cpp #include "derivata.h" int main(){ Derivata d(4,5); d.setnum3(6); cout << "Size of d: " << sizeof(d) << endl; cout << "d-num1: " << d.getnum1() << " d->num2: " << d.getnum2() << " d->num3: " << d.getnum3() << endl; cout << "Sum: " << d.somma() << endl; return 0; } Output: Size of d: 12 d-num1: 4 d->num2: 5 d->num3: 6 Sum: 15
41 L'ereditarietà di tipo protected Dichiarazione di ereditarietà di tipo protected: nome_classe_derivata : protected nome_classe_base{ corpo della classe derivata; }; Nell eredità di tipo protected, la classe derivata vede sia i membri public che quelli protected della classe base come protected: essi non sono accessibili direttamente dall esterno, ma unicamente dall interno di ogni classe derivata. L ereditarietà di tipo protected non è molto usata: esiste solo per completezza di linguaggio.
42 L'ereditarietà di tipo protected Classe Base Classe Derivata Private base Protected base is-a protected Private dt Protected dt Public base Public dt
43 L'ereditarietà di tipo protected Classe Derivata Private base Accesso diretto Protected base Public base programma Private dt Protected dt Public dt
44 L'ereditarietà di tipo protected Classe Derivata Private base Protected base Public base Private dt Accesso diretto Altre classi derivate Protected dt Public dt
45 I tre tipo di ereditarietà a confronto Tipo di ereditarietà Classe Base Classe Derivata Public public public protected private protected hidden Protected public protected protected protected private hidden Private public private protected private private hidden
46 L'overriding dei metodi della classe base nelle classi derivate Una classe derivata può eseguire l overriding, ovvero la sovrascrittura, di un metodo della classe base implementandone una nuova versione con uguali: tipo restituito, nome, attributi e lista di argomenti. L overriding è una procedura simile all overloading. Quest ultimo, però, richiede che due riscritture della stessa funzione siano differenti solo per il numero o il tipo degli argomenti passati. Se viene eseguito l overriding di una funzione overloaded nella classe base, la classe derivata avrà accesso diretto solo alla versione di cui ha fatto l overriding. Qualora si rendesse, tuttavia, necessario chiamare un metodo della classe base nascosto alla classe derivata a causa del suo overriding, basterà richiamare la funzione facendo precedere il suo nome dall operatore di risoluzione dello scope :: nonché dal nome della classe base: nome_classe_base :: nome_funzione_membro( argomenti )
47 Esempio: base.h Esempio: overriding e overloading // file base.h #ifndef BASE_H #define BASE_H #include<iostream> using namespace std; class Base{ private: int num1; int num2; public: Base(int i1, int i2){ num1=i1; num2=i2; } int getnum1(){ return num1; } int getnum2(){ return num2; }
48 Esempio: base.h Overloading print void print(){ cout << "Base::print()" << endl; cout << "Num1: " << num1 << " Num2: " << num2 << endl; } void print(int i){ cout << "Base::print(int)" << endl; cout << "Int: " << i << endl; cout << "Num1 and Num2: " << num1 << " " << num2 << endl; } }; #endif
49 Esempio: derivata1.h Overriding print #include "base.h" class Derivata1: public Base{ private: int num3; int sum; public: Derivata1(int i1, int i2, int i3):base(i1,i2){num3=i3; sum=0;} int somma(){ sum=num3+getnum2()+getnum1(); return sum; } void print(){ cout << "Derivata1::print()" << endl; cout << "Num1: " << getnum1() << " Num2: "<< getnum2() << " Num3 : " << num3 << endl; cout << "Sum: " << sum << endl; }};
50 Esempio: derivata2.h Overloading and overriding print #include "base.h" class Derivata2: public Base{ private: int num3; int sum; public: Derivata2(int i1, int i2, int i3):base(i1,i2){num3=i3; sum=0;} int somma(){ sum=num3+getnum2()+getnum1(); return sum; } void print(){ cout << "Derivata2::print()" << endl; cout << "Sum is:" << sum <<endl; } void print(char dummy){ cout << "Derivata2::print(char)" << endl; cout << "Char: " << dummy << endl; cout << "Num1: " << getnum1() << " Num2: " << getnum2() << " Num3 : " << num3 << endl; cout << "Sum: " << sum << endl; } };
51 Esempio: main.ccp #include "derivata1.h" #include "derivata2.h" int main(){ Base b(4,5); Derivata1 d1(b.getnum1(),b.getnum2(),6); Derivata2 d2(b.getnum1(),b.getnum2(),10); d1.somma(); d2.somma(); cout << "d1 printing:" << endl; d1.print(); d1.base::print(); d1.base::print(d1.somma()); cout << endl; cout << "d2printing:" << endl; d2.print(); d2.print('c'); d2.base::print(); d2.base::print(d2.somma()); return 0;}
52 Esempio: output output: d1 printing: Derivata1::print() Num1: 4 Num2: 5 Num3 : 6 Sum: 15 Base::print() Num1: 4 Num2: 5 Base::print(int) Int: 15 Num1 and Num2: 4 5 d2printing: Derivata2::print() Sum is:19 Derivata2::print(char) Char: c Num1: 4 Num2: 5 Num3 : 10 Sum: 19 Base::print() Num1 4 Num2: 5 Base::print(int) Int: 19 Num1 and Num2: 4 5
53 Ereditarietà multipla Una classe derivata può avere più di una classe base: in questo caso si parla di ereditarietà multipla class classe_derivata : public classe_base1,, public classe_basen E possibile che due o più classi base contengano funzioni membro dichiarate con lo stesso nome. Per chiamare queste funzioni senza alcuna ambiguità bisogna ricorrere all operatore di risoluzione dello scope :: preceduto dal nome della corrispondente classe base: nome_oggetto.classe_basea :: nome_funzione; nome_oggetto.classe_baseb :: nome_funzione;
54 Ereditarietà multipla // file base1.h class Base1{ private: int num1; int num2; public: Base1(int i1, int i2){num1=i1; num2=i2;} int getnum1(){ return num1; } int getnum2(){ return num2; } }; // file base2.h class Base2{ private: int num1; int num2; public: Base2(int i1, int i2){num1=i1; num2=i2;} int getnum1(){ return num1; } int getnum2(){ return num2; } };
55 Ereditarietà multipla // file derivata.h #include "base1.h" #include "base2.h" class Derivata: public Base1, public Base2{ private: int num3; public: Derivata(int i1, int i2, int i3, int i4, int i5): Base1(i1,i2),Base2(i3,i4){ num3=i5; } int getnum3(){ return num3;} int somma(){ int sum; }; sum=num3+base2::getnum2()+base2::getnum1()+base1::getnum2()+ Base1::getNum1(); return sum; }
56 // file main.cpp #include<iostream> #include "derivata.h" using namespace std; Ereditarietà multipla int main(){ Derivata d(4,5,6,7,8); cout << "Size of d: " << sizeof(d) << endl; cout << "d->num1: " << d.base1::getnum1() << " Num2: " << d.base1::getnum2() << " Num3: " << d.base2::getnum1() << " Num4: " << d.base2::getnum2() << " Num5: " << d.getnum3() <<endl; cout << "Sum: " << d.somma() << endl; return 0; } Output: Size of d: 20 d->num1: 4 Num2: 5 Num3: 6 Num4: 7 Num5: 8 Sum: 30
57 Casting Nell ereditarietà (di tipo public) un oggetto della classe derivata non è altro che una particolare istanza della classe base. E permesso assegnare ad un puntatore alla classe base l indirizzo di un oggetto della classe derivata. Nell operazione di assegnamento, l oggetto puntato subisce una conversione di tipo (derivata -> base). Il puntatore alla classe base è in grado di vedere solo i membri ed i metodi ereditati dalla classe base stessa da parte dell oggetto puntato. d Base* b; Derivata d; b Private Base Protected Base b = &d; &d punta vede a Public Base Private Derivata Protected Derivata Public Derivata
58 Casting E, al contrario, vietato assegnare direttamente ad un puntatore alla classe derivata l indirizzo di un oggetto della classe base. Il casting automatico (base -> derivata) creerebbe, infatti, un oggetto incompleto. Base b; Derivata* d; d=&b; d *d &b vedrebbe punta a b Private Base Protected Base Public Base?
59 Casting E, tuttavia, possibile forzare il compilatore ad eseguire un operazione di casting (base -> derivata) facendo uso dell operatore static_cast: Base b; Derivata* d; d=static_cast<derivata*>(&b); L operatore dynamic_cast, invece, non permette di svolgere alcuna conversione di tipo che porti alla creazione di oggetti incompleti. Tale operatore non accetta il casting (base -> derivata) a meno che la classe base non sia polimorfa. Base b; Derivata* d; d=dynamic_cast<derivata*>(&b); // errore (base->derivata) Derivata d; Base* b; b=dynamic_cast<base*>(&d); // ok (derivata->base)
60 Esempio: base.h Esempio1: casting automatico (derivata->base) //file base.h #include<iostream> using namespace std; class Base{ friend ostream& operator<<(ostream&, const Base&); private: int num1; int num2; public: Base(int i1, int i2){num1=i1; num2=i2;} int getnum1(){ return num1; } int getnum2(){ return num2; } }; ostream& operator<< (ostream& out, const Base& b){ out << "Num1-> " << b.num1 << " Num2-> " << b.num2 << endl; return out;}
61 Esempio: derivata.h #include "base.h" class Derivata: public Base{ friend ostream& operator<<(ostream&, const Derivata&); private: int num3; public: Derivata(int i1, int i2, int i3):base(i1,i2){num3=i3;} int getnum3(){ return num3;} int somma(){ int sum; sum=num3+getnum2()+getnum1(); return sum; } }; ostream& operator<<(ostream& out, const Derivata& d){ out << static_cast<base>(d); out << "Num3-> " << d.num3 << endl; return out;}
62 Esempio: main.ccp #include "derivata.h" int main(){ Base* b; Derivata d(4,5,6); b=&d; cout << "Size of b: " << sizeof(b) << endl; cout << "Size of d: " << sizeof(d) << endl; cout << "Base: " << *b << endl; cout << "Derivata: " << d; cout << "Sum: " << d.somma() << endl; return 0; } output: Size of b: 4 Size of d: 12 Base: Num1-> 4 Num2-> 5 Derivata: Num1-> 4 Num2-> 5 Num3-> 6 Sum: 15 (è un puntatore)
63 Esempio: derivata.h Esempio2: casting errato (base->derivata) // file main.cpp #include "derivata.h" int main(){ Base b(4,5); Derivata* d; d=&b; cout << "Size of b: " << sizeof(b) << endl; cout << "Size of d: " << sizeof(d) << endl; cout << "Base: " << b << endl; cout << "Derivata: " << *d; cout << "Sum: " << d->somma() << endl; return 0; } compiling: main.cpp: In function int main() : main.cpp:6: error: invalid conversion from Base* to Derivata*
64 Esempio: main.ccp Esempio3: dynamic_cast errato (base->derivata) // file main.cpp #include "derivata.h" int main(){ Base b(4,5); Derivata* d; d=dynamic_cast<derivata*>(&b); cout << "Size of b: " << sizeof(b) << endl; cout << "Size of d: " << sizeof(d) << endl; cout << "Base: " << b << endl; cout << "Derivata: " << *d; cout << "Sum: " << d->somma() << endl; return 0; } compiling: main.cpp: In function int main() : main.cpp:6: error: cannot dynamic_cast &b (of type class Base*) to type class Derivata* (source type is not polymorphic)
65 Esempio Esempio4: static_cast, oggetto incompleto (base->derivata) // file main.cpp #include "derivata.h" int main(){ Base b(4,5); Derivata* d; d=static_cast<derivata*>(&b); cout << "Size of b: " << sizeof(b) << endl; cout << "Size of d: " << sizeof(d) << endl; cout << "Base: " << b << endl; cout << "Derivata: " << *d; cout << "Sum: " << d->somma() << endl; return 0; } output: Size of b: 8 Size of d: 4 Base: Num1-> 4 Num2-> 5 Derivata: Num1-> 4 Num2-> 5 Num3-> Sum: (è un puntatore)
Laboratorio di Algoritmi e Strutture Dati
Realizzazione di Liste Laboratorio di Algoritmi e Strutture Dati Domenico Redavid redavid@di.uniba.it Materiale di base gentilmente concesso dal dott. Nicola Di Mauro Ricercatore presso l'univ. di Bari
Ingegneria del Software
Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi
Const, friend, static,this
Const, friend, static,this Sommario Lo speficatore const per gli oggetti e le funzioni membro Le funzioni friend I membri static di una classe Il puntatore this Oggetti const Alcuni oggetti devono poter
Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi
Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi
Corso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,
Corso di Grafica Computazionale
Corso di Grafica Computazionale Note di C++ Docente: Massimiliano Corsini Laurea Specialistica in Ing. Informatica Università degli Studi di Siena Note Iniziali Il C++ non ha il concetto dei packages In
Corso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Introduzione alla programmazione in C++ 1 Un introduzione Che cosa è il C++? La programmazione procedurale La programmazione orientata agli oggetti La programmazione
Modulo 4: Ereditarietà, interfacce e clonazione
Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo
Generalizzazione di funzioni e di classi. Macro come funzioni generiche
Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)
Java Native Interface Appunti
Java Native Interface Appunti Riccardo Rizzo 1/8 Introduzione L'uso delle Java Native Interface e' giustificato tutte quelle volte che una applicazione non puo' essere scritta interamente in Java. Per
Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)
Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 20 Ottobre 2014
Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 20 Ottobre 2014 1 Tipi non Predefiniti Abbiamo visto: Tipi elementari (int, float, char,...) Tipi composti (arrays e tipi non predefiniti) C++ permette
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Introduzione alla OOP Dal C al C++ C++ Orientato agli Oggetti Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari
Visibilità dei Membri di una Classe
Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce
Ambienti di sviluppo integrato
Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente
Gestione di files Motivazioni
Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)
Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore
Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter
costruttori e distruttori
costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,
Introduzione a.net (2)
Introduzione a.net (2) Il linguaggio C# Implementazioni alternative dell'architettura.net: Rotor Mono C#: un nuovo linguaggio C# : CLR = Java : JVM C# è il linguaggio di riferimento per.net Costruito su
public int gety() { return y;
Alcuni esercizi su metodi sovrascritti e late binding 1. Siano date le classi seguenti: public class A { private int x; public A (int k) { x = k; public int getx() { return x; public class B extends A
Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE
Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...
Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica
Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,
Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le
Le operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Unità Didattica 3 Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Input / Output attraverso stream. I/O in C vs. I/O in C++
Alessio Bechini - Corso di - Input / Output attraverso stream (anno accademico 2002-2003) Utilizzo di stream per I/O I/O in C vs. I/O in C++ La libreria C standard per l I/O viene acceduta con stdio.h
Programmazione a Oggetti Lezione 10. Ereditarieta
Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare
Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni
Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni Esercizio 1 Nella classe definita di seguito indicare quali sono le variabili di istanza, quali sono le variabili
PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++
PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ Classi ed oggetti. Classi derivate, ereditarietà e polimorfismo. Template Capitoli 12, 13, 14 Luis Joyannes Aguilar. Fondamenti di Programmazione in C++. Algoritmi,
1. Soluzione esercizio XYZ SpA
1. Soluzione esercizio XYZ SpA 2. Oggetti fstream e loro uso Si vuole realizzare un piccolo sistema informativo a supporto dell'attività dell'ufficio dipendenti della società XYZ SpA. Tale società opera
ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)
ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia) Scrivere una funzione per definire se un numero è primo e un programma principale minimale che ne testa la funzionalità. #include
Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte
Java riutilizzo delle classi G. Prencipe prencipe@di.unipi.it Introduzione Una delle caratteristiche fondamentali in Java è il riutilizzo del codice Ci sono due modi per ottenerlo Creare oggetti di classi
Parola chiave extends
Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi
Programmazione Java: Variabili membro, Metodi La parola chiave final
Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave
Corso Programmazione 1 Capitolo 01: Concetti Elementari
Corso Programmazione 1 Capitolo 01: Concetti Elementari Docente: Roberto Sebastiani - roberto.sebastiani@unitn.it Esercitatori: Mario Passamani - mario.passamani@unitn.it Alessandro Tomasi - alessandro.tomasi@unitn.it
Proff. Fabio Ciao e Raffaele Bortone
ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMAZIONE ANNUALE A.S. 2014/2015 Classe IV C Informatica Proff. Fabio Ciao e Raffaele Bortone Libro di testo: Cloud
Grammatica di base: Pointers
Grammatica di base: Pointers Esistono I puntatori a funzioni. Bisogna esplicitare esattamente il tipo di ritorno e il tipo di argomento. Per evitare ambiguità con il prefisso * nel declarator, il nome
Introduzione all' OO in Python
Introduzione all' OO in Python Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 85
Input/output in C e in C++
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni
INFORMATICA - I puntatori Roberta Gerboni
1 2 I puntatori in C++ Il puntatore un tipo di dato scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un
Le stringhe. Le stringhe
Informatica: C++ Gerboni Roberta Stringhe di caratteri (esempi di utilizzo dei vettori) Nel linguaggio C++ una stringa è semplicemente un vettore di caratteri Vettori di caratteri La stringa "hello" è
Memory Management. Local Storage. Global Storage. Delete esplicite
Memory Management Costruzione di Interfacce Lezione 13 Dal Java al C++ cignoni@iei.pi.cnr.it http://vcg.iei.pi.cnr.it/~cignoni Due grandi categorie di storage: Local, memoria valida solo all interno di
void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }
FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo
C++ dlopen mini HOWTO
Aaron Isotton aaron@isotton.com 2006-03-16 Diario delle Revisioni Revisione 1.10 2006-03-16 Revisionato da: AI Cambio di licenza da GFDL a GPL. Corretta la spiegazione dell uso di dlerror, al riguardo
SOMMARIO. Programmazione orientata agli eventi. Programmazione orientata agli eventi. Programmazione orientata agli eventi
SOMMARIO Programmazione orientata agli eventi Graphical User Interface (GUI) Programmazione in Windows MFC GUI multipiattaforma Qt Applicazione di esempio (Qt) Programmazione orientata agli eventi Un evento
1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/2010 - III Informatica Serale I.T.I.S.
1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/2010 - III Informatica Serale I.T.I.S. Molinari 4: Il programma gestisce gli articoli di un negozio
Funzioni. Il modello console. Interfaccia in modalità console
Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi
APPUNTI SUL FILTRO 1-POLO
APPUNTI SUL FILTRO 1-POLO CARMINE EMANUELE CELLA Sommario. Forma differenziale e simmetrica; funzione di trasferimento e risposta in frequenza; calcolo dei coefficienti mediante condizioni sull equazione
Le variabili. Olga Scotti
Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.
Oggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
Un esempio di ereditarietà in JAVA
Un esempio di ereditarietà in JAVA Ecco un semplice esempio di ereditarietà e polimorfismo in Java. Una progressione numerica è una sequenza di numeri dipendenti l uno dal precedente o dai precedenti.
Indice. Introduzione. I tipi aritmetici. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco A.A.
Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 Indice Tipi semplici propri del linguaggio Variabili Tipi composti
Introduzione a ROOT. 1. Informazioni generali
Introduzione a ROOT 1. Informazioni generali ROOT è un ambiente visualizzazione e trattamento dati interattivo sviluppato al CERN (si veda il sito ufficiale http://root.cern.ch interamente sviluppato in
Linguaggio C - Funzioni
Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche
Analisi di massima: L utente dovrà inserire un numero limite, e tramite vari calcoli verrà stampato a video la sequenza.
Relazione tecnica Fibonacci ANDENA GIANMARCO Traccia: Creare un algoritmo che permetta, dato un valore intero e positivo, di stabilire la sequenza utilizzando la regola di fibonacci dei numeri fino al
Uso degli oggetti. Un programma Java. è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi
Uso degli oggetti Uso di oggetti predefiniti attraverso l'invio di messaggi. Il concetto di metodo; argomenti e restituzione di valori; segnatura e prototipo di un metodo. Il concetto di overloading. Le
Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment
Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete
2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.
Tipo File Per memorizzare un dato su un supporto magnetico come un hard disk o un nastro, o più in generale su un'unità di memoria di massa viene utilizzata un tipo di dato chiamato file. Un file può essere
Laboratorio di Programmazione Gruppo III, Ml-ZZ. Alberto Finzi finzi@na.infn.it
Laboratorio di Programmazione Gruppo III, Ml-ZZ Alberto Finzi finzi@na.infn.it Record e File binari Record La definizione della struttura è data dalla parola riservata struct seguita da un identificatore,
Librerie. Laboratorio di Informatica Antonio Monteleone 28
Librerie Una libreria è una collezione di funzioni (classi, variabili) usata per sviluppare applicazioni. Le funzioni (classi, variabili) contenute in una libreria si dicono da questa esportate. L'uso
Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015
Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle
INTRODUZIONE INTRODUZIONE JAVA JAVA
INTRODUZIONE INTRODUZIONE Lo sviluppo di applicazioni complesse porta a costruire moduli software sempre più potenti e versatili, che possano essere riutilizzati in numerosi progetti I linguaggi ad oggetti
Esonero del corso di Programmazione a Oggetti
Esonero del corso di Programmazione a Oggetti Roma, 1 dicembre 2005 Considerate le seguenti definizioni di classi e interfacce in Java: interface Fumetto{ void esclama(); void utile(); class Personaggio
Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012
Programmazione a oggetti e JAVA Prof. B.Buttarazzi A.A. 2011/2012 Sommario Variabili statiche Ereditarietà multipla Le interfacce Binding Esercizi Esercizio ContoCorrente Creare una classe ContoCorrente
Concetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
Ricerca sequenziale di un elemento in un vettore
Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna
UML Diagrammi delle classi. UML Diagramma classi 1
UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio
Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza
ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza vers.0 in lavorazione Docente SAFFI FABIO Contenuti Implementazione delle operazioni di base mediante main in un unico file sorgente... 2 Struttura
Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1
Prossime lezioni Dai TDA agli oggetti Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 18 19 gennaio
I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002
I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti
Indice. Materiale di riferimento. Struttura di un programma in C++ Introduzione al C++ (CAP 1) Alberto Garfagnini e Marco Mazzocco A.A.
Introduzione al C++ (CAP 1) Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 Indice Scrittura del primo programma in C++ elementi costitutivi del programma compilazione
IL CONCETTO DI FILE. È illecito operare oltre la fine del file.
IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni
TUTORATO di LINGUAGGI I
TUTORATO di LINGUAGGI I Enrico Vianello TUTORATO di LINGUAGGI I contatti utili LE LEZIONI SI TERRANNO: VENERDI 12.30-14.30 PER INFORMAZIONI e DOMANDE: enrico.vianello@student.unife.it IL MATERIALE UTILIZZATO
Connessione ad internet
Introduzione al C++ Connessione ad internet Istruzioni per la connessione internet: - una volta connessi, aprire un browser (firefox) - in Modifica/preferenze/avanzate/rete/impostazioni - attivare la modalità
Inizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
Inprise/Borland Forum 2000
Milano 26 Maggio Inprise/Borland Forum 2000 Sviluppi su Delphi, Java/JBuilder, C++/C++ Builder con la partecipazione di: C++ Builder Aderenza allo Standard e Qualità del Codice Carlo Pescio (pescio@eptacom.net)
I puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
Il paradigma OO e le relative metodologie di progettazione. Programmazione orientata agli oggetti
Alessio Bechini - Corso di - Il paradigma OO e le relative metodologie di progettazione Metodologie OO Programmazione orientata agli oggetti La programmazione ad oggetti (OOP) è un paradigma di programmazione
Corso di Programmazione ad oggetti
Corso di Programmazione ad oggetti Il sistema di I/O del C++ a.a. 2008/2009 Claudio De Stefano 1 Il Modello di Von Neumann Il Modello di Von Neumann prevede che la CPU carichi in maniera sequenziale i
Elementi di Finanza, metodi numerici e loro implementazione.
Elementi di Finanza, metodi numerici e loro implementazione. Marco Airoldi E mail: MarcoAiroldi@yahoo.it Versione documento 7.5 c Marco Airoldi 11 novembre 2009 ii Indice 1 Elementi di programmazione ad
Prova Scritta del 19/07/10
Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da un solo lato. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo
Esercizi di programmazione in C
Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal
Utilizzo e scrittura di classi
Utilizzo e scrittura di classi Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 14 novembre, 2001 Gino Perna Implementazione di classi in C++ UN ESEMPIO DI CLASSE: RISULTATI
Programmazione a Oggetti Modulo B
Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione
Funzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
Struttura di un programma. File e moduli Linkage, scope e prototipi Compilazione e linking
Struttura di un programma File e moduli Linkage, scope e prototipi Compilazione e linking Programmazione modulare Tecnica di programmazione che ha lo scopo di aumentare l indipendenza tra le sue parti
DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE INTRODUZIONE SINGLETON. Scopo dei design pattern creazionali
DESIGN PATTERN CREAZIONALI DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2013 2014 rcardin@math.unipd.it
R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone
Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:
Il linguaggio C# Ereditarietà ed Interfacce
Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it
!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9
!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se
La struttura dati ad albero binario
La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,
puntatori Lab. Calc. AA 2007/08 1
puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene
Esercizi della lezione 5 di Java
Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java
Linguaggio C. Fondamenti. Struttura di un programma.
Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione
Esercitazione n 4. Obiettivi
Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:
Programmazione I / Informatica generale Prova scritta 11 Giugno 2008
Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 NOTA: Si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main. Inoltre, nei programmi è da sottintendere
! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java
Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione