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.
lunedì 25 novembre 2013
Prima esercitazione sulle classi
Disponibile una nuova esercitazione relativa alla scrittura di semplici classi.
Salve professore. Avrei un dubbio riguardo l'ultimo esercizio. Quando il testo ci chiede di verificare il corretto funzionamento delle quattro funzioni per le operazioni tra frazioni, ed implementarle, dobbiamo dare per scontato che quella definizione del metodo (data dal testo) sia corretta ed usare quello, o possiamo cambiarla come vogliamo? Io ad esempio pensavo che il tipo di ritorno debba essere Razionale&, e che si debbano passare due variabili, sempre del tipo Razionale&, in modo da potere passare (senza modificarli, come richiesto) i valori della classe "a" e della classe "b", e ritornare il puntatore this, in questo modo:
class Razionale{ private: int num; int den; public: Razionale(); void stampa()const; void leggi(); void semplifica(); !!@@---> Razionale& moltiplica(Razionale&, Razionale&); <---@@!!! };
Razionale& Razionale::moltiplica(Razionale& a, Razionale& b){ num=(a.num)*(b.num); den=(a.den)*(b.den); return (*this); }
nel main: Razionale a, b, c; c.moltiplica(a,b);
Spero di essere stato chiaro. Grazie mille per l'attenzione.
Quando progetti una classe sei libero di mettere tutti i metodi che ritieni opportuni. Nel caso dell'esercizio ti veniva semplicemente richiesto di implementare quelle particolari funzioni membro e non di riprogettare la classe. In termini generali comunque la funzione che proponi potrebbe anche essere una scelta valida.
Si, indubbiamente possono essere const. Infatti il metodo viene chiamato per l'operando di sinistra dell'operazione che certamente non deve cambiare durante l'operazione.
Salve professore.
RispondiEliminaAvrei un dubbio riguardo l'ultimo esercizio. Quando il testo ci chiede di verificare il corretto funzionamento delle quattro funzioni per le operazioni tra frazioni, ed implementarle, dobbiamo dare per scontato che quella definizione del metodo (data dal testo) sia corretta ed usare quello, o possiamo cambiarla come vogliamo? Io ad esempio pensavo che il tipo di ritorno debba essere Razionale&, e che si debbano passare due variabili, sempre del tipo Razionale&, in modo da potere passare (senza modificarli, come richiesto) i valori della classe "a" e della classe "b", e ritornare il puntatore this, in questo modo:
class Razionale{
private:
int num;
int den;
public:
Razionale();
void stampa()const;
void leggi();
void semplifica();
!!@@---> Razionale& moltiplica(Razionale&, Razionale&); <---@@!!!
};
Razionale& Razionale::moltiplica(Razionale& a, Razionale& b){
num=(a.num)*(b.num);
den=(a.den)*(b.den);
return (*this);
}
nel main:
Razionale a, b, c;
c.moltiplica(a,b);
Spero di essere stato chiaro. Grazie mille per l'attenzione.
Quando progetti una classe sei libero di mettere tutti i metodi che ritieni opportuni. Nel caso dell'esercizio ti veniva semplicemente richiesto di implementare quelle particolari funzioni membro e non di riprogettare la classe.
RispondiEliminaIn termini generali comunque la funzione che proponi potrebbe anche essere una scelta valida.
Salve professore,
RispondiEliminaho un dubbio riguardo l'ultimo esercizio. I metodi somma, sottrai, ecc..., devono essere const?
Le propongo un esempio sul metodo moltiplica:
Razionale Razionale :: moltiplica (Razionale add) const {
Razionale ris;
ris.num = num * add.num;
ris.den = den * add.den;
ris.semplifica();
return ris;
}
Si, indubbiamente possono essere const. Infatti il metodo viene chiamato per l'operando di sinistra dell'operazione che certamente non deve cambiare durante l'operazione.
RispondiEliminaVa bene grazie mille.
RispondiElimina