Programmazione orientata agli oggetti. Sommario. OOP: incapsulamento

Documenti analoghi
Ingegneria del Software

Lettura e scrittura di file di dati input/output

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

4 GLI ARRAY E LE STRINGHE

WINDOWS Avviare Windows95. Avviare Windows95 non è un problema: parte. automaticamente all accensione del computer. 2. Barra delle applicazioni

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

ISTRUZIONI PER L USO DEL SOFTWARE. PER LA PROGRAMMAZIONE DEI TELECOMANDI Alias

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

WINDOWS TERMINAL SERVER PER L ACCESSO REMOTO AL SISTEMA DI PROTOCOLLO INFORMATICO

Java Native Interface Appunti

Lezione 1 Introduzione alla programmazione ad oggetti

Sul pattern Decorator

Procedura operativa per la gestione della funzione di formazione classi prime

Autodesk Map parte I digitalizzazione e importazione dati

Gestione delle eccezioni in Java

Guida alla Registrazione Utenti

Introduciamo l'uso della programmazione ad oggetti in PHP...perchè si può fare!

PG5 Starter Training Applicazione File System Daniel Ernst EN Stefano Peracchi IT

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Note_Batch_Application 04/02/2011

Modellazione Poligonale Avanzata

PROCEDIMENTO DI COMPILAZIONE DELLA SCIA E DELL EVENTUALE INTERCALARE REQUISITI PER L AVVIO DELL ATTIVITA DI AGENTE E/O RAPPRESENTANTE DI COMMERCIO

SPECIFICHE OPERATIVE X LA CONTABILITA DEI PROFESSIONISTI

Pubblicazione di app, fogli e racconti. Qlik Sense 1.1 Copyright QlikTech International AB. Tutti i diritti riservati.

Refactoring 5 Sposta Metodo. 5 Sposta Metodo. 5 Sposta Metodo - Codice iniziale

Documenti accessibili

Introduzione alle macchine a stati (non definitivo)

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Gestione risorse (Windows)

Ridimensionamento Immagini

Ministero della Salute

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Lezione 3 Progettazione di siti

Esonero del corso di Programmazione a Oggetti

Manuale Sito Videotrend

La codifica. dell informazione

Sistemi Web per il turismo - lezione 3 -

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

testo Saveris Web Access Software Istruzioni per l'uso

Grafici e Pagina web

Manuale Utente CMMG Corso Medici Medicina Generale

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Corso di Programmazione ad Oggetti

Sincronizzare file con Google Drive GUIDA PRATICA HELPDESK CO.GE.S. COOPERATIVA SOCIALE

TPL - Indagini di frequentazione: sistema di rilevamento. FAQ Frequently Asked Questions

Sommario. Oggetto: Istruzioni configurazione client VPN SSL per piattaforma Mac OSX Data: 25/01/2016 Versione: 1.0

GUIDA ALLA NAVIGAZIONE DELL'AREA RISERVATA INTEGRATA NEL PORTALE COMUNALE

Come usare la piattaforma StartUp

Quick Print. Quick Print. Guida Utente. Copyright 2013 Hyperbolic Software.

NEWSLETTER 8/2016. Corato, 31 marzo 2016 SOMMARIO DISPOSIZIONI LEGISLATIVE

Supporto On Line Allegato FAQ

Logo. (Setup Kit)

Soluzioni informatiche innovative MCNET DENUNCIA TELEMATICA. Manuale utente

POSTALIZZAZIONE Manuale d'uso del modulo di postalizzazione di RipartoIG

ECDL CORE 5.0. Modulo 1 Concetti di base dell ICT 1.6 Aspetti giuridici. Docente: Stefania De Martino Liceo G. Leopardi Recanati a.s.

Di seguito i quesiti sugli elementi diritto pubblico con le risposte esatte contraddistinte dall'asterisco e di lato segnato il peso della domanda

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione ad Oggetti

Integrazione al Manuale Utente 1

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

GUIDA ALLA PRESENTAZIONE DI PRATICHE EDILIZIE RESIDENZIALI PER VIA TELEMATICA

EQUAZIONI CON VALORE ASSOLUTO DISEQUAZIONI CON VALORE ASSOLUTO

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Modulo 2 Data Base - Modello Relazionale

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Libretto Elettronico Scuole di Specializzazione dell Area Medica Sede di Udine

ACCESSO ALLA POSTA ELETTRONICA TRAMITE OUTLOOK WEB ACCESS

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

Utilizzo collegamento remoto

SOFTWARE DI NOTAZIONE MUSICALE

Ereditarietà, funzioni virtuali e polimorfismo

SCARICO REFERTI ULSS PD116

Navigare in Internet Laboratorio di approfondimento la creazione di siti web e/o blog. Marco Torciani. (Seconda lezione) Unitre Pavia a.a.

* in giallo le modifiche apportate rispetto alla versione precedente datata 17/04/2012

3. Terza esercitazione autoguidata: progetto gestione voli

Manutenzione periodica al PIANO DEI CONTI

elicaweb manuali - logistica magazzino - pagina 1 di 5

Modulo 2 Test di verifica

Software per il calcolo del valore Normale degli Immobili

Corso di Informatica

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

M n a u n a u l a e l e o p o e p r e a r t a i t v i o v o Ver /12/2014

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

APPENDICE - Pratiche di radiazione Polo ACI

Programmazione a Oggetti Lezione 10. Ereditarieta

Soluzione dei sistemi lineari con metodo grafico classe 2H

Lavoro & Previdenza La circolare su temi previdenziali e giuslavoristici

Via Oberdan, 42, Faenza (RA) Italy Tel.: Fax: WAVE MODE MOBILE GUIDA RAPIDA

AutoritàEmittente CNS Contraente. Certificatore Accreditato. La firma digitale

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 28 Giugno 05 Nome: Cognome: Matricola: Esercizio 1

Guida per il cittadino

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Progettazione di Algoritmi

20. LA PROGRAMMAZIONE AD OGGETTI

Transcript:

Sommario Programmazione orientata agli oggetti, OOP: Incapsulamento. Ereditarietà (e composizione). Polimorfismo. Ereditarietà: Sintassi. Metodi. Upcasting. Metodi speciali. Programmazione orientata agli oggetti La programmazione orientata agli oggetti (objectoriented programming, OOP) si basa su tre principi fondamentali: Incapsulamento (encapsulation): come nascondere l implementazione di una e. Ereditarietà (inheritance): come promuovere un corretto ri-uso del codice. Polimorfismo (polymorphism): come manipolare tipi (i) tra loro collegati in un modo uniforme. Informatica Medica, I semestre, C++ 1 Informatica Medica, I semestre, C++ 2 OOP: incapsulamento L incapsulamento permette di nascondere i dettagli di implementazione non necessari all utente della e: per esempio, il programmatore utente vuole leggere due immagini, farne la differenza e salvare il risultato: MyImage a("im1.pgm"); MyImage b("im2.pgm"); MyImage res = a-b; res.save("diff.pgm"); OOP: incapsulamento La e MyImage ha incapsulato i dettagli interni di leggere un immagine dall hard disk, caricala in memoria, elaborarla e salvare il risultato nuovamente in un file. L OOPpermette al programmatore utente della e di scrivere codice in modo più semplice: non deve preoccuparsi p del codice per la gestione delle immagini. Si devono solo creare istanze (oggetti) e spedire gli appropriati messaggi (metodi). Informatica Medica, I semestre, C++ 3 Informatica Medica, I semestre, C++ 4

OOP: incapsulamento Un altro aspetto dell incapsulamento è la protezione dei dati: i campi di una e (lo stato di un oggetto) devono essere dichiarato private e non public. In tal modo gli utenti della e devono utilizzare dei metodi per poter leggere o scrivere i dati privati di un oggetto: non si accede mai direttamente all implementazione interna di una e. OOP: ereditarietà L ereditarietà permette di costruire nuove definizioni di e utilizzando definizioni di i esistenti. L ereditarietà permette di estendere il comportamento di una e base (base or parent ), abilitando una e derivata (derived or child ) ad ereditare i metodi e i campi di tale e base. Informatica Medica, I semestre, C++ 5 Informatica Medica, I semestre, C++ 6 OOP: ereditarietà L ereditarieta ica descrive una relazione del tipo è un ( is-a ). Shape Hexagon Classe base Classe derivata Il diagramma si legge come un esagono è una forma : quando le i sono legate da una relazione del tipo is-a allora sono in relazione di ereditarietà. Informatica Medica, I semestre, C++ 7 OOP: ereditarietà In questo caso la e Shape descrive campi e metodi comuni a tutte le forme geometriche e quindi è la e base (quella più generale). La e Hexagon è una (is-a) forma, quindi eredita tutti i campi e metodi di Shape (senza doverli riscrivere) e poi definisce i propri specifici metodi e campi (è una e derivata, meno generale). Informatica Medica, I semestre, C++ 8

OOP: composizione Un altra forma di riuso del codice nella OOP è la composizione (una relazione del tipo ha un, has-a ): alcuni campi della e sono oggetti di altre i. In questo caso non ci sono relazioni del tipo is- a, come tra e base e i derivate. Si ricorda l esempio della e Line che rappresenta una linea che passa tra due punti del piano: la linea has-a a punto e non is-a un punto, quindi è composizione. OOP: polimorfismo Il polimorfismo permette di trattare nello stesso modo oggetti di i diverse ma che sono collegate tra loro attraverso l ereditarietà. La e base dfii definisce un insiemei di metodi (interfaccia polimorfica) che sono comuni a tutte le i derivate. L interfaccia polimorfica è basata su metodi virtuali che ogni e derivata può modificare per renderli specifici. Attraverso l interfaccia polimorfica ogni oggetto risponde in modo specifico alla stessa richiesta. Informatica Medica, I semestre, C++ 9 Informatica Medica, I semestre, C++ 10 Circle OOP: polimorfismo Shape Hexagon Classe base Classi derivate Per esempio, la e Shape definisce un metodo virtuale Draw() e tutte le sue i derivate lo ridefiniscono (overriding), perché ogni forma si disegna in un modo diverso. OOP: polimorfismo Allora attraverso un puntatore della e base posso invocare il metodo corretto per ogni oggetto creato: void elabora(shape *p){ //... p->draw(); Disegna un cerchio o int main(){ un esagono, anche seè Circle c; invocato da un Hexagon h; puntatore a Shape elabora(&c); elabora(&h); return 0; Informatica Medica, I semestre, C++ 11 Informatica Medica, I semestre, C++ 12

Una possibilità per riusare il codice già scritto da altri è implementare una e che ha come dati membro degli oggetti di altre i, cioè la composizione (composition). Il vantaggio è che non si accede direttamente al codice, maseneusanolefunzionalità: in tal modo non si rischia di introdurre nuovi errori in codice che è corretto (è stato verificato da chi ha scritto le i che si usano per implementare la propria e). Un esempio di composizione (già presentato in una precedete lezione) può essere la e che rappresenta una retta che usa due Point come attributi privati. Informatica Medica, I semestre, C++ 13 Line.h #ifndef LINE_H #define LINE_H #include "point.h Oggetti come Line{ Point p1,p2; attributi Line(float x1, float y1, float x2, float y2); ~Line(); void Stampa(); ; Line.cpp #include "Point.h" #include "Line.h" Line::Line(float x1, float y1, float x2, float y2) : p1(x1,y1), 1 1) p2(x2,y2) 2 2) { cout<<"line()"<<endl; //p1(x1,y1);//errore: //compile-time Line::~Line(){ cout<<"~line()"<<endl; <<endl; void Line::Stampa(){ cout<<"\tl: "; p1.stampa(); p2.stampa(); cout<<endl; Informatica Medica, I semestre, C++ 14 Test.cpp #include "Point.h" #include "Line.h" void test1(); int main(){ test1(); return 0; void test1(){ Line l1(1,1,3,3); 1 3); l1.stampa(); Point(1,1) Point(3,3) 3) Line() L: (1,1) (3,3) ~Line() ~Point ~Point Sono chiamati i costruttori dei dati membro e i relativi ltiidistruttori tt i Informatica Medica, I semestre, C++ 15 I sotto-oggetti (subobject) p1 e p2 rappresentano l implementazione della retta e quindi sono privati: in tal modo si può cambiare l implementazione e lasciare la stessa interfaccia pubblica. In altri casi un sotto-oggetto potrebbe essere lasciato pubblico in modo da poter utilizzare la sua interfaccia (oppure (pp l oggetto privato e un insieme di metodi pubblici che richiamano l interfaccia dell oggetto privato). Vediamo un esempio di una e che rappresenta un computer con un lettore di DVD pubblico. Informatica Medica, I semestre, C++ 16

DVD.h DVD.cpp #ifndef DVD_H #include "DVD.h" #define DVD_H DVD{ //campi DVD::DVD(){ cout<<"\tcostruttore DVD()"<<endl; //costruttori, //distruttore, tt altri DVD& DVD::open(){ //metodi cout<<"dvd aperto"<<endl; DVD(); return *this; DVD& open(); DVD& close(); DVD& DVD::close(){ void play(); cout<<"dvd chiuso"<<endl; ; return *this; void DVD::play(){ cout<<"dvd..."<<endl; Il ritorno di *this consente la concatenazione delle chiamate che si riferiscono allo stesso oggetto. Informatica Medica, I semestre, C++ 17 Desktop.h #ifndef DESKTOP_H #define DESKTOP_H #include "DVD.h" Desktop{ //campi //costruttori, //distruttore, altri //metodi Desktop(); DVD dvd; ; test.cpp void test1(){ Desktop pc; pc.dvd.open().close().play(); Desktop.cpp #include "Desktop.h" Desktop::Desktop():dvd(){ cout<<"\tcostruttore Desktop()"<<endl; Costruttore DVD() Costruttore Desktop() DVD aperto DVD chiuso DVD... Informatica Medica, I semestre, C++ 18 ed ereditarietà Un altro modo di riusare il codice è attraverso il meccanismo dell ereditarietà: di i in tal caso la nuova e eredita attributi e metodi della e base. In generale, la composizione ii implica una relazione del tipo has-a, mentre l ereditarietà implica una relazione del tipo is-a a : : un Desktop ha un DVD e non è un DVD. Mentre un Desktop è un Computer. La e base rappresenta una astrazione più generale, mentre le i derivate ne sono una specializzazione. Computer Ereditarietà Classe base Desktop Laptop Classi derivate La definizione della gerarchia di i mostrata è la seguente: Computer{ ; Desktop: public Computer{ ; Laptop: public Computer{ ; Informatica Medica, I semestre, C++ 19 Informatica Medica, I semestre, C++ 20

Ereditarietà : sintassi La parola chiave public indica che i membri pubblici della e base rimangono pubblici per la e derivata, altrimenti sarebbero privati. La e derivata contiene un sotto-oggetto della e base. Per inizializzare un sotto-oggetto si deve chiamare l opportuno costruttore nella lista di inizializzazione dei costruttori. I distruttori sono automaticamente chiamati l intera gerarchia. per Informatica Medica, I semestre, C++ 21 Base.h #ifndef BASE_H #define BASE_H Base{ int b; Base(int i=0); ; ; Derivata.h #ifndef DERIVATA_H #define DERIVATA_H Derivata : public Base{ int d; Derivata(int i=0,int j=0); ~Derivata(); ; Ereditarietà : sintassi Base::Base(int i):b(i){ cout<<"base("<<b<<")"<<endl; Base::{ cout<<""<<endl; Base.cpp Derivata.cpp #include "Derivata.h" Costruttore del sottooggetto della e base Derivata::Derivata(int i,int j): Base(i), d(j){ cout<<"derivata("<<d<<")"<<endl; Derivata::~Derivata(){ cout<<"~derivata()"<<endl; Informatica Medica, I semestre, C++ 22 test.cpp #include "Derivata.h" void test1(){ Base bobj(1); cout<<""<<endl; Derivata dobj(20,10); cout<<""<<endl; cout<<"base "<<sizeof(bobj)<<" byte"<<endl; cout<<"derivata "<<sizeof(dobj)<<" byte"<<endl; cout<<""<<endl; int main(){ test1(); return 0; Ereditarietà : sintassi Base(1) Base(20) Derivata(10) Base 4 byte Derivata 8 byte ~Derivata() Debugging Ereditarietà : metodi Se nella e derivata si ridefinisce un metodo della e base vi sono due possibilità: Se il metodo ha la stessa firma e tipo di ritorno, si dice che si è eseguito un redefining; Se cambia la firma o il tipo di ritorno allora tutti i corrispondenti metodi sovraccaricati della e base sono nascosti. N.B. Le i sono semplici per poter focalizzare l attenzione solo sull ereditarietà ereditarietà. Informatica Medica, I semestre, C++ 23 Informatica Medica, I semestre, C++ 24

Base.h #ifndef BASE_H #define BASE_H Base{ int b; Base(int i=0); ; void Set(int i); void Set(int i, int j); void Print(); ; Ereditarietà : metodi Base::Base(int i):b(i){ cout<<"base("<<b<<")"<<endl; Base::{ cout<<""<<endl; void Base::Set(int i){ b=i; Base.cpp cout<<"base::set(int )"<<endl; void Base::Set(int i, int j){ b=i*j; cout<<"base::set(int, int )"<<endl; void Base::Print(){ cout<<"base::print(): "<<b<<endl; Derivata.h #ifndef DERIVATA_H #define DERIVATA_H #include "Base.h Derivata : public Base{ int d; Derivata(int i=0, int j=0); ~Derivata(); void Set(int i); ; Viene chiamato direttamente un metodo del sotto-oggetto della e base Ereditarietà : metodi Derivata.cpp #include "Derivata.h" Derivata::Derivata(int i,int j): Base(i), d(j){ cout<<"derivata("<<d<<")"<<endl; Derivata::~Derivata(){ cout<<"~derivata()"<<endl; void Derivata::Set(int i){ d=i; Base::Set(2*i); cout<<"derivata::set(int )"<<endl; Informatica Medica, I semestre, C++ 25 Informatica Medica, I semestre, C++ 26 test.cpp void test2(){ Derivata dobj(20,10); cout<<""<<endl; dobj.set(3); //dobj.set(3,5);//errore cout<<""<<endl; dobj.print(); cout<<""<<endl; Metodo presente solo nella e base ed ereditato dalla e derivata Ereditarietà : metodi Base(20) Derivata(10) Base::Set(int ) Derivata::Set(int ) Base::Print(): 6 ~Derivata() Visual Studio Ereditarietà privata Se una e eredita in modo private allora la nuova e ha tutte le funzionalità e dati della e base ma in forma privata. L eventuale utente non può accedervi e la e derivata non può essere usata come un tipo della e base. Quando si usa l eredità privata si dice che si implementa in termini di. Se si vuole rendere pubblico qualche membro, allora lo si deve dichiarare nella sezione pubblica della e derivata. Informatica Medica, I semestre, C++ 27 Informatica Medica, I semestre, C++ 28

Ereditarietà: protected In alcuni casi è utile fornire l accesso a una parte dell implementazione della e base, in modo che lo sviluppatore delle i derivate la possa sfruttare. Tuttavia per gli altri utenti deve essere privata. Tale tipo di accesso differenziato è permesso dalla parola chiave protected. Una e derivata può accedere direttamente ad un membro protected, mentre il resto del programma deve utilizzare una funzione pubblica di accesso. Tuttavia l accesso diretto per la e derivata è relativo solo al proprio sotto-oggettooggetto e non ad un oggetto indipendente. Base.h #ifndef BASE_H #define BASE_H Base{ protected: int b; Base(int i=0); ; void Set(int i); void Print()const; ; Ereditarietà : protected Base.cpp Base::Base(int i):b(i){ cout<<"base("<<b<<")"<<endl; Base::{ cout<<""<<endl; void Base::Set(int i){ b=i; void Base::Print()const{ cout<<"b="<<b<<endl; "<<b<< Informatica Medica, I semestre, C++ 29 Informatica Medica, I semestre, C++ 30 Derivata.h #ifndef DERIVATA_H #define DERIVATA_H Derivata : public Base{ int d; Derivata(int i=0, int j=0); ~Derivata(); void Set(int i); void Elab(Base &bobj); void Print()const; ; Un campo del proprio sotto-oggetto Un campo di un oggetto esterno Ereditarietà : protected Derivata.cpp #include "Derivata.h" Derivata::Derivata(int i, int j): Base(i), d(j){ cout<<"derivata("<<d<<")"<<endl; Derivata::~Derivata(){ cout<<"~derivata()"<<endl; void Derivata::Set(int i){ d=i; b=2*i; void Derivata::Print()const{ cout<<"b="<<b<<" d="<<d<<endl; void Derivata::Elab(Base &bobj){ //d=bobj.b;//errore bobj.print(); Informatica Medica, I semestre, C++ 31 test.cpp void test3(){ Base bobj(10); Derivata dobj(2,1); //cout<<bobj.b;//errore dobj.set(3); dobj.print(); cout<<""<<endl; dobj.elab(bobj); j); Ereditarietà : protected Rimane privato per gli utenti della e Base(10) Base(2) Derivata(1) b=6 d=3 b=10 ~Derivata() Informatica Medica, I semestre, C++ 32

Ereditarietà: upcasting Un aspetto importante dell ereditarietà non è solo il fatto che le i derivate hanno nuove funzionalità, ma è la relazione di tipo che esiste tra e base e derivate: la nuova e è un tipo della e esistente. In tal modo tutte le funzionalità della e base sono presenti nella e derivata e quindi qualsiasi messaggio che può essere spedito ad un oggetto della e base può essere spedito ad un oggetto della e derivata. Informatica Medica, I semestre, C++ 33 Ereditarietà : upcasting La conversione di un puntatore o riferimento ad un oggetto di una e derivata in un puntatore o riferimento alla e base è detto upcasting ed è supportato dl dal compilatore, perché risulta sicuro convertire un tipo specifico/derivato a uno più generale/base (fornisce le funzionalità minime e quelle comuni) void test4(){ Base bobj(10); Derivata dobj(2,1); Base *p = &dobj; //p->elab(bobj);//errore p->print(); Solo l interfaccia della e base è disponibile Base(10) Base(2) Derivata(1) b=2 ~Derivata() Informatica Medica, I semestre, C++ 34 Ereditarietà : upcasting Per default le funzioni membro sono invocate in base al tipo statico del riferimento o puntatore attraverso il quale sono invocate: in tal modo l invocazione è determinata a tempo di compilazione. Questa scelta è stata fatta per efficienza. Il termine upcasting si riferisce a come normalmente vengono disegnate le gerarchie di i derivate: la e base è in alto. Ereditarietà: metodi speciali Vi sono alcuni metodi speciali che non sono ereditati ma devono essere direttamente implementati: icostruttori e il distruttore, in particolare ilcostruttore per copia e l operatore di assegnamento. Informatica Medica, I semestre, C++ 35 Informatica Medica, I semestre, C++ 36