|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
[C++] operatore di assegnamento: overloading e sottoclassi.
ho un problemino di C++
dopo aver cercato invano sul web e sui libri senza essere venuto a capo di nulla mi rassegno e vengo a rompere le scatole a voi... dovendo creare una sorta di "database" ho creato delle classi tipo_di_dato; per i diversi tipi di dati da memorizzare, e una classe generica che contenesse le diverse entry. in questo modo il generico membro del database sarebbe accessibile come database1.tipo_di_dato1.read(); database1.tipo_di_dato1.write(); volendo rimpiazzare read e write avevo pensato all'overloading dell'operatore di assegnamento, purtroppo però non trovo un esempio che chiarisca una situazione del genere.. qualcuno mi sa delucidare su un problema del genere?!? in tutti gli esempi presentati propongono l'operatore assegnamento per un'operazione del tipo tipo_di_dato1 = 3; operazione che non funziona, chiaramente, per database1.tipo_di_dato1 = 3; Ultima modifica di hibone : 14-08-2008 alle 16:24. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
in che linguaggio?
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
pardon C++
ero talmente preso dalle cose da fare che mi sono persino scordato di scriverlo....... |
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
Quote:
perchè visto il tuo facile umorismo, dovrei aver mancato di cercare in qualche posto a dir poco ovvio... tornando al problema io ho già provato l'implementazione "canonica" suggerita nei manuali, ma ovviamente non funziona, perchè passo la reference sbagliata e non so come identificare il membro di una classe tramite reference, membro di cui devo assegnare... ...un membro... ho già cercato ma tutti gli esempi che ho trovato usano l'overloading di assegnamento per assegnare contemporaneamente tutti i membri di una classe, mentre a me interessa un membro specifico da passare come parametro... se qualcuno fosse così gentile da indicarmi una guida sull'argomento, o di indicarmi anche sommariamente il prototipo dell'operatore sarebbe cosa gradita... grazie per l'aiuto. Ultima modifica di hibone : 15-08-2008 alle 01:39. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
nessuno ha uno spunto?
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Scusa, ma non basta fare una cosa del genere (vado a senso):
Codice:
class C { tipo_t dato; /* ... */ public: /* ... */ C& operator=(const C& ref) { dato = ref.dato; return this; } tipo_t operator=(tipo_t d) { dato = d; } }
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 17-08-2008 alle 21:11. |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
Quote:
Codice:
class dato_t { int value; } class C { public: dato_t dato1; dato_t dato2; dato_t dato3; public: /* ... */ } devo passare un riferimento a dato1, o dato2 o dato3, per andare a scrivere sul membro "value" del caso... |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Se non hai modo di distinguere i tipi, non credo ci siano molte alternative alla definizione di metodi diversi da usare a seconda del caso...
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
Quote:
se io faccio una cosa del tipo padre.figlio = valore; l'assegnamento non viene applicato a figlio, ma a padre? edit: o più correttamente l'assegnamento viene applicato a tutti i membri dello stesso tipo di "figlio"?? Ultima modifica di hibone : 18-08-2008 alle 15:56. |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
No, l'operatore lo stai definendo tu e sei tu a dire dove dovrà andare quel dato: semplicemente se alla destra c'è un tipo diverso, devi fare un operatore diverso per leggere quel tipo. Per farti un esempio, se hai una classe che rappresenti un numero complesso puoi voler distinguere i due casi in cui l'assegnamento viene da un altro oggetto "numero complesso" oppure da una struttura con due campi numerici che rappresentano rispettivamente parte reale e parte immaginaria: i dati in input sono di tipo diverso e in questo caso ti tocca fare l'overloading dell'operatore di assegnazione.
ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
Quote:
ma se i dati di input sono uguali non c'è overloading che tenga... se ho due membri dello stesso tipo, ad esempio chiamo tali membri A e B, e volessi assegnare alternativamente o all'uno o all'altro un oggetto di tipo int, ad esempio, non ho posso fare alcun overloading, in quanto avrei sempre lo stesso prototipo... sbaglio? |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Appunto ti sto dicendo da due post che o separi i tipi o assegni usando funzioni personalizzate...
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jan 2006
Città: Vergate Sul Membro (MI)
Messaggi: 16540
|
Quote:
http://www.hwupgrade.it/forum/showpo...9&postcount=10 avevo chiesto una cosa leggermente differente ![]() grazie dell'aiuto e a buon rendere... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:29.