Blog del corso di Programmazione (9 CFU) tenuto da Marco La Cascia presso l'Universita' di Palermo per il corso di laurea in Ingegneria Informatica e delle Telecomunicazioni. Tratta la programmazione a oggetti in Java.
giovedì 27 novembre 2014
Esercitazione 6 e note relative al capitolo 7
Disponibile una nuova esercitazione sulle funzionalità di base delle classi e le note relative alle classi.
Salve Prof, ho qualche problema con i membri privati delle classi, infatti dichiaro gli elementi della classe come private e poi non riesco ad utilizzarli nelle funzioni. Se non vado errato, se nelle funzioni che implemento all'esterno della class scrivo "NomeClasse::funzione(argometi){}", dovrebbero avere libero accesso anche agli elementi privati, è giusto? Oppure devo per forza dichiarare le funzioni friend? In ogni caso questo è il codice: /*class.h*/
#include #include
using std::cin; using std::endl; using std::cout;
class Punto{ private: double x,y; public: void set(Punto& ); double dist(Punto& , Punto& ); Punto media(Punto& , Punto& ); };
void Punto::set(Punto& a){ cin>>a.x>>a.y; }
double Punto::dist(Punto& a, Punto& b){ double d;
d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
return d; }; Punto Punto::media(Punto& a ,Punto& b){ Punto c; c.x=(a.x+b.x)/2; c.y=(a.y+b.y)/2;
La classe che hai scritto è sbagliata come approccio perché i metodi non operano sull'oggetto per cui vengono chiamati ma solo sui parametri. Comunque proprio per il discorso dell'accesso ai membri private è corretta. I metodi possono accedere senza problemi ai membri privati e infatti, provando a compilare la tua classe con un main vuoto, a me ha compilato correttamente.
Salve professore, nell'esercizio 4 chiede di implementare le varie funzioni sia come metodi che come funzioni esterne alla classe, ma le funzioni esterne possono essere dichiarate come friend all'interno della classe oppure devono utilizzare solo la parte pubblica della classe (attraverso metodi set e get)?
Salve Prof,
RispondiEliminaho qualche problema con i membri privati delle classi, infatti dichiaro gli elementi della classe come private e poi non riesco ad utilizzarli nelle funzioni. Se non vado errato, se nelle funzioni che implemento all'esterno della class scrivo "NomeClasse::funzione(argometi){}", dovrebbero avere libero accesso anche agli elementi privati, è giusto? Oppure devo per forza dichiarare le funzioni friend?
In ogni caso questo è il codice:
/*class.h*/
#include
#include
using std::cin;
using std::endl;
using std::cout;
class Punto{
private:
double x,y;
public:
void set(Punto& );
double dist(Punto& , Punto& );
Punto media(Punto& , Punto& );
};
void Punto::set(Punto& a){
cin>>a.x>>a.y;
}
double Punto::dist(Punto& a, Punto& b){
double d;
d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
return d;
};
Punto Punto::media(Punto& a ,Punto& b){
Punto c;
c.x=(a.x+b.x)/2;
c.y=(a.y+b.y)/2;
return c;
};
La classe che hai scritto è sbagliata come approccio perché i metodi non operano sull'oggetto per cui vengono chiamati ma solo sui parametri. Comunque proprio per il discorso dell'accesso ai membri private è corretta. I metodi possono accedere senza problemi ai membri privati e infatti, provando a compilare la tua classe con un main vuoto, a me ha compilato correttamente.
RispondiEliminaSalve professore,
RispondiEliminanell'esercizio 4 chiede di implementare le varie funzioni sia come metodi che come funzioni esterne alla classe, ma le funzioni esterne possono essere dichiarate come friend all'interno della classe oppure devono utilizzare solo la parte pubblica della classe (attraverso metodi set e get)?
Come esercizio lo puoi provare in entrambi i modi. Comunque in generale è meglio limitare il più possibile l'uso di friend.
RispondiElimina