|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
[c++] funzioni friend e ridefinizione degli operatori
salve, sto facendo una classe che permette di usare oggetti frazione come tipi primitivi ma non capisco perchè se ridefinisco < così:
Codice:
friend bool operator < (frazione a, frazione b);
bool operator < (frazione a, frazione b)
{
if ( (a._num * b._den) < (b._num * a._den) )
return true;
else
return false;
}
Codice:
bool operator > (frazione a, frazione b);
bool frazione::operator > (frazione a, frazione b)
{
return !(a<b);
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perché è errato come l'hai scritto:
Codice:
bool frazione::operator > (frazione b)
{
return !(*this < b);
}
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
accidenti grazie.. la cosa del ! non l'avrei mai immaginata.. in ogni caso non mi è chiarissimo l'uso del *this sebbene sappia cos'è..
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
this è il puntatore all'oggetto corrente...giusto ?
*this cosa sarà ? Ovviamente l'oggetto corrente Quindi se scrivi *this < b, passi all'operatore friend < come primo parametro l'oggetto corrente e come secondo b |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
Codice:
int main()
{
frazione a(4, 1), b(2, 1);
bool x = a>b;
return 0;
}
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
a...cioè l'istanza della classe di cui chiami l'operatore >.
|
|
|
|
|
|
#7 | ||||
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
ecco il .h
e il .cpp
come ti sembra? si può migliorare? se si, come? dovrei aggiungerci qualcosa? grazie |
||||
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Gli operatiro che fanno un'assegnazione devono sempre ritornare un reference all'oggetto stesso. Se non usi & ritorni una copa dell'oggetto non puoi ad esempio fare: (a += b) += c; in quanto a += b ritornerà un copia dell'oggetto a (tramite il costruttore di copia), ma non l'oggetto a stesso. Quindi andrai a richiamare += c su un oggetto temporaneo che verrà automaticamente liberato alla fine del blocco. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:26.



















