View Full Version : [OVELOADING DEGLI OPERATORI/C++] operator =
Ciao a tutti,
sto studiando l'overloading degli operatori in C++.... e ho letto che l'overloding dell'operator = non si può fare con tecniche friend. ok! perchè?
Grazie per l'aiuto
Nessuno sa dirmi il perchè?
incipit1970
30-10-2008, 19:12
Ciao a tutti,
sto studiando l'overloading degli operatori in C++.... e ho letto che l'overloding dell'operator = non si può fare con tecniche friend. ok! perchè?
Grazie per l'aiuto
Come dici, gli operatori =, () e [] (e se non ricordo male anche ->) possono essere implementati solo in funzioni membro della classe (non possono essere nemmeno static).
Gli operatori definiti come membri della classe operano sul valore "this" implicito, che non viene specificato nella lista di parametri. Gli operatori friend d'altra parte sono esterni alla classe e tutti i loro parametri devono essere espliciti. Infatti, per ridefinire l'operatore +, se è membro devi fare: "operator +(valore)", che si traduce in "this + valore", mentre lo stesso operatore come friend deve avere i due argomenti: "operator +(valore1, valore2)", che si traduce in "valore1 + valore2". Nel secondo caso, non c'è il this implicito.
Il problema degli operatori =, () e [] è che richiedono, per funzionare correttamente, un "lvalue", ovvero, puoi assegnare un literale ad una variabile, ma non l'opposto (puoi fare x = 1, ma non 1 = x). Quindi, il lato sinistro di una eguaglianza ha alcune limitazioni (dev'essere una variabile, e dunque un istanza della classe che ridefinisce l'operatore, altrimenti non puoi fare un'assegnazione). Pertanto, non puoi usare un operatore friend perché questo operatore non impone limitazioni su quale dev'essere il lato sinistro dell'assegnazione, mentre l'operatore membro si (dev'essere this).
Per lo stesso motivo non possono essere static (implicherebbe che potrebbero essere usati anche in assenza di una istanza, e quindi non ci sarebbe un lvalue valido).
Forse ho fatto un po' di confusione con la risposta, se hai dubbi chiedi pure...
Ok!! Grazie per la risposta... se ho altri dubbi scrivo;
Anche gli operatori () [] e -> non possono essere friend... per lo stesso motivo dell'operatore =? giusto?
Mi faresti degli esempi, per favore?
ALTRO ARGOMENTO:
Ho provato a fare un costruttore di copie nel caso in cui una funzione mi deve restituire un oggetto temporaneo, ma inspiegabilmente non mi funziona... qualche idea o suggerimento?
I casi in cui bisogna utilizzare il costruttore di copie sono 3:
1- Inizializzazione di un oggetto con un altro oggetto.
2- Passaggio di un oggetto ad una funzione per valore.
3- Restituzione di un oggetto temporaneo da una funzione.
ESEMPI:
1°CASO: miaclasse m=m1;
2°CASO: funzione(m);
3°CASO: m=funzione(); //Ovviamente le funzioni possono anche essere membri della classe!!!
ALTRO ARGOMENTO:
Mi fareste un esempio semplice del puntatore a funzione e del suo funzionamento in memoria?
Grazie anticipatamente a tutti(L'esame si avvicina.... Help....)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.