Pages: [1]   Go Down
Print
Author Topic: Overloading degli operatori  (Read 4804 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
milos224
Forumista
***
Offline Offline

Posts: 830


« on: 17-06-2013, 23:37:17 »

Ho cercato questo argomento sul web, e ho capito che praticamente se per esempio faccio l'overloading del segno +, se prima 2+2=4, posso far valere per esempio il segno +, quello che voglio io in pratica.. qualcuno riesce a farmi qualche esempio concreto con del codice? Cioè se io creo una classe, con due semplici variabili a=10, b=15, e voglio che l'operatore + diventi una moltiplicazione, come faccio a trasformarlo? Grazie!
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #1 on: 18-06-2013, 13:01:19 »

http://publib.boulder.ibm.com/infocenter/cellcomp/v101v121/topic/com.ibm.xlcpp101.cell.doc/language_ref/cplr318.html
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #2 on: 18-06-2013, 14:31:11 »

Sono quasi certo che ti sei almeno parzialmente distratto durante la lezione in cui si parlava dell'overload degli operatori C++ boh
In particolare:
se per esempio faccio l'overloading del segno +, se prima 2+2=4
allora dopo 2+2=4, sempre, comunque, qualsiasi cosa tu abbia fatto tramite l'overload degli operatori .

L'overload degli operatori è solo uno stratagemma per dare un nome che sia un simbolo aritmetico/di rotazione a dei metodi esposti dalle classi (quindi si parla di oggetti, non dati di tipo semplice, come gli interi), e la cui sintassi ricalchi quella degli operatori stessi (quindi se il metodo esposto dalla tua classe si chiama "+", non lo invocherai tramite
oggetto1.+(oggetto2), ma con la più naturale sintassi oggetto1+oggetto2, sebbene architetturalmente parlando non cambierebbe nulla.

Avere un metodo che ha il nome e la sintassi di un operatore si rivela particolarmente e/o comodo quando la logica sottostante alla procedura produce un output e dei cambiamenti di stato che si rivelano aderenti al significato (aritmeticamente parlando) di quell'operatore.

Nel codice presente al link che ha postato l'utente Fr3d3R!K, per esempio, si vede come si sia creata una classe che rappresenta i numeri complessi, entità matematiche che possiamo vedere come un gruppo e a cui quindi possiamo associare una operazione di addizione. L'addizione si fa tramite operatore "+", e analogamente possiamo sfruttare una sintassi del tipo oggettoNcomplesso1+oggettoNcomplesso2 per costruire un nuovo oggetto di tipo numero complesso che ne rappresenti la somma.

Poi, ovviamente, puoi fare anche cose contro-intuitive, come definire l'operatore "+" affinché faccia il prodotto di numeri complessi, spetta all'utente programmatore capire cosa vuole ottenere.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
milos224
Forumista
***
Offline Offline

Posts: 830


« Reply #3 on: 19-06-2013, 09:06:50 »

mi dice non disponibile..
EDIT: ok ora va
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #4 on: 19-06-2013, 09:08:48 »

Riprova.

La pagina ho visto che, dopo essere stata correttamente scaricata, cambia URL in questa:
http://publib.boulder.ibm.com/infocenter/cellcomp/v101v121/index.jsp?topic=/com.ibm.xlcpp101.cell.doc/language_ref/cplr318.html

Ma devono funzionare entrambe.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
milos224
Forumista
***
Offline Offline

Posts: 830


« Reply #5 on: 19-06-2013, 09:10:37 »

Avevo già visto questo esempio e più o meno questo l'ho capito.. approfitto per un'altra cosa..
Code:
complx complx::operator+ (const complx& c) const
non capisco l'uso di & nel complx dato come parametro.. a che serve?
Logged
milos224
Forumista
***
Offline Offline

Posts: 830


« Reply #6 on: 19-06-2013, 22:31:13 »

Scusate ma ho ancora problemi, ho questa consegna per esempio:
Si progetti un package di classi per la rappresentazione di un circuito elettrico composto dalle seguenti classi.
• Component<T>, classe che rappresenta un componente elettronico generico, con i seguenti attributi:
◦ type: tipo di componente, string o char *
◦ name: nome del componente, string o char *
◦ value: valore o sigla del componente, tipo generico T ◦ measure_unit: unita' di misura, string o char *

Definire gli opportuni costruttori, i metodi per il get/set degli attributi e l'overloading dell'operatore “<<” per la stampa dell'oggetto.

Ho fatto tutto tranne appunto l'overloading dell'operatore..ho provato di tutto ma non riesco a trovare la sintassi giusta..
Code:
template <class T>
class Component{
string type, name, measure_unit;
T value;
public:
Component(string ty,string na,string mea,T va){
type=ty;
name=na;
measure_unit=mea;
value=va;
}
string gettype(){
return type;
}
string getname(){
return name;
}
string getmeasure(){
return measure_unit;
}
T getval(){
return value;
}
« Last Edit: 19-06-2013, 22:34:52 by milos224 » Logged
Pages: [1]   Go Up
Print
Jump to: