Funzioni Friend Come abbiamo visto non possiamo accedere a membri privati di una classe dall'esterno della classe. Ma a volte abbiamo bisogno di farlo.

Slides:



Advertisements
Presentazioni simili
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Advertisements

Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Esercitazione guidata 1
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Programmazione Corso di laurea in Informatica
Approfondimento delle classi
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Programmazione modulare nel linguaggio C
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
Lezione XI Laboratorio di Programmazione. Ereditarieta Fondamentale proprieta dei linguaggi OO. Permette di specificare un nuova classe derivata da unaltra.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
1 Applet ed HTML Fondamenti di Informatica Corso D.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
UML.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
CORSO DI PROGRAMMAZIONE II Lezione 22
1 Un esempio con iteratore: le liste ordinate di interi.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
1 Java primo contatto Quando le classi fanno la differenza …
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Transcript della presentazione:

Funzioni Friend Come abbiamo visto non possiamo accedere a membri privati di una classe dall'esterno della classe. Ma a volte abbiamo bisogno di farlo. Si può definire la funzione come "friend" della classe. Così dall'interno della funzione si è in grado di accedere a qualsiasi membro privato senza ottenere errori. Vediamo un esempio: class A { int a; public: A (int aa) a = aa; } friend void foo(); }; void foo() A a_obj (5); // Normale chiamata a_obj.a = 10; // Non sarebbe permesso // in una funzione non-friend

Funzioni Friend Puoi mettere le dichiarazioni friend da qualsiasi parte nella definizione della classe, perché una ad una funzione friend non si applicano gli attributi di pubblico o privato. Notare che è la classe che sceglie quali funzioni avranno il permesso di accedere direttamente ai suoi membri privati. Dopo questa dichiarazione nella classe, non è necessario alcun altro prototipo quando definiamo la funzione. Puoi usare anche una funzione membro di un'altra classe come funzione friend di una classe. class B; // dichiarazione necessaria per evitare problemi di // riferimento circolare class A { void uses_class_B (B &); // Normale funzione membro }; class B friend void A::uses_class_B (B &);// dichiarazione di una // funzione friend In questo esempio la funzione uses_class_B della classe A, che accetta per parametro un riferimento ad un oggetto della classe B, è friend della classe B.

Classi Friend (o "Amiche") Come abbiamo fatto per le funzioni, possiamo anche dichiarare delle classi friend. Questo è piuttosto semplice da fare: class A { int a; friend class B; }; class B public: void foo(); B::foo() A a_obj; a_obj.a = 10; // Non sarebbe permesso se la classe B // non fosse friend di A } Nota bene che è la classe A che sceglie quali classi hanno il diritto di accedere ai suoi membri privati e non quest'ultime.

Classi Friend (o "Amiche") Una conseguenza di questo fatto è che classi amiche di classi amiche di una classe non sono classi amiche anche di quest'ultima. Vediamo un esempio per chiarire il gioco di parole: class A { int a; friend class B; }; class B int b; friend class C; class C int c; int foo() B b_obj; b_obj.b = 10; // OK A a_obj; a_obj.a = 10; // Rifiutata dal compilatore. Dovrebbe esserci } // una dichiarazione di C come class friend in A. In altre parole la relazione X è friend di Y non è una relazione transitiva.C è friend di B, B è friend di A non implica che C sia friend di A Classi Friend (o "Amiche")