Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
La nuova fotocamera compatta DJI spicca per l'abbinamento ideale tra le dimensioni ridotte e la qualità d'immagine. Può essere installata in punti di ripresa difficilmente utilizzabili con le tipiche action camera, grazie ad una struttura modulare con modulo ripresa e base con schermo che possono essere scollegati tra di loro. Un prodotto ideale per chi fa riprese sportive, da avere sempre tra le mani
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-07-2012, 19:49   #1
oRpo
Senior Member
 
L'Avatar di oRpo
 
Iscritto dal: Sep 2005
Città: Vicenza
Messaggi: 377
[C++] Metodo const e modifiche sull'oggetto di invocazione - Best Practise

Salve a tutti.
Un metodo dovrebbe essere dichiarato const se e solo se la sua invocazione non produce side-effects sull'oggetto di invocazione o sulla classe di invocazione.
Supponendo che la classe abbia come campo dato di istanza un puntatore ad una collezione di oggetti (vedi esempio), se dovessi fare un metodo push, questo metodo devo marcarlo come const? A rigor di logica sì. visto che non modificando nessun oggetto di invocazione, provoca comunque side-effect indirettamente.

esempio:

class A
{
vector<int> * punt;
public:
void push(int) const;

...

A(): punt(new vector<int>);
}



Cosa mi consigliate?

Mattia
oRpo è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2012, 17:39   #2
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Prendendo come buona la tua definizione di quando una funzione dovrebbe essere const oppure non const, essendo push non referenzialmente trasparente non dovrebbe essere dichiarata const.
Fatti questa domanda: posso sostituire una chiamata alla funzione push con il valore che restituisce senza che nulla cambi nel mio programma?
Se la risposta è sì, allora secondo la tua definizione di quando una funzione dovrebbe essere const ( ma cosa significa side effects sull'oggetto di invocazione? ) oppure no, push deve essere const. Altrimenti non deve esserlo.

Quando si parla di c++, non si dice metodo ma funzione. Una sola volta mi pare di aver visto la parola method nel libro di stroustrup e, se non sbaglio, si riferiva ad una funzione ereditata che fa l'overriding.
Sapessi quante volte sono stato bachettato io perchè usavo la parola metodo. Se parli sui canali irc iniziano a dirti, "che cosa è un metodo in c++?", "Io non so cosa è un metodo, a cosa ti riferisci?".. ahahah
Scusate lo sfogo
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200

Ultima modifica di __ZERO_UNO__ : 09-07-2012 alle 22:53.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2012, 23:57   #3
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Prendendo come buona la tua definizione di quando una funzione dovrebbe essere const oppure non const, essendo push non referenzialmente trasparente non dovrebbe essere dichiarata const.
Fatti questa domanda: posso sostituire una chiamata alla funzione push con il valore che restituisce senza che nulla cambi nel mio programma?
Se la risposta è sì, allora secondo la tua definizione di quando una funzione dovrebbe essere const ( ma cosa significa side effects sull'oggetto di invocazione? ) oppure no, push deve essere const. Altrimenti non deve esserlo.

Quando si parla di c++, non si dice metodo ma funzione. Una sola volta mi pare di aver visto la parola method nel libro di stroustrup e, se non sbaglio, si riferiva ad una funzione ereditata che fa l'overriding.
Sapessi quante volte sono stato bachettato io perchè usavo la parola metodo. Se parli sui canali irc iniziano a dirti, "che cosa è un metodo in c++?", "Io non so cosa è un metodo, a cosa ti riferisci?".. ahahah
Scusate lo sfogo
Mah, sinceramente non sono d'accordo. Il c++ è legato al termine "funzione" per la sola sua discendenza dal c. Oltre a questo il c++ pur incorporando principi del paradigma OOP non lo abbraccia al 100% e rimane in quella "mezza strada" che lo rende performante/potente e astio allo stesso tempo.
In realtà però in c++ i metodi esistono eccome, per il semplice fatto che un metodo altro non è che un altro modo (più conciso) di definire una "funzione membro".
Tutto il resto lo reputo sinceramente uno sciocco gioco di termini che i puristi del c++ usano. (Così come i puristi degli altri linguaggi se la "tirano" in altri frangenti eh)
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2012, 08:51   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Il C++ definisce i metodi come "member function", chiamarli solo funzioni è sbagliato. "Metodi" è genericamente il gergo OOP (mutuato da Smalltalk)
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2012, 16:29   #5
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Mah, sinceramente non sono d'accordo. Il c++ è legato al termine "funzione" per la sola sua discendenza dal c. Oltre a questo il c++ pur incorporando principi del paradigma OOP non lo abbraccia al 100% e rimane in quella "mezza strada" che lo rende performante/potente e astio allo stesso tempo.
In realtà però in c++ i metodi esistono eccome, per il semplice fatto che un metodo altro non è che un altro modo (più conciso) di definire una "funzione membro".
Tutto il resto lo reputo sinceramente uno sciocco gioco di termini che i puristi del c++ usano. (Così come i puristi degli altri linguaggi se la "tirano" in altri frangenti eh)
Sono d'accordo con la tua descrizione. Ma non penso che sia solo uno sciocco gioco di termini, perchè se una funzione membro la chiami metodo, come identifichi una funzione globale? Metodo globale?
Penso che per uniformità ed evitare ambiguità sia meglio usare i termini funzione membro e funzione globale quando si parla di c++. Inoltre in tutti i testi che trattano di c++ è usata questa convenzione.
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200

Ultima modifica di __ZERO_UNO__ : 10-07-2012 alle 16:40.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2012, 16:50   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Sono d'accordo con la tua descrizione. Ma non penso che sia solo uno sciocco gioco di termini, perchè se una funzione membro la chiami metodo, come identifichi una funzione globale? Metodo globale?
L'osservazione di Kendall mi pare abbastanza pertinente:
Quote:
Originariamente inviato da Kendall
In realtà però in c++ i metodi esistono eccome, per il semplice fatto che un metodo altro non è che un altro modo (più conciso) di definire una "funzione membro".
Puoi usare il termine "metodo" come un sinonimo di "funzione membro" senza questo renda neccessario trovare un sinonimo per "funzione globale", o sbaglio?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2012, 23:52   #7
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da oRpo Guarda i messaggi
Salve a tutti.
Un metodo dovrebbe essere dichiarato const se e solo se la sua invocazione non produce side-effects sull'oggetto di invocazione o sulla classe di invocazione.
Supponendo che la classe abbia come campo dato di istanza un puntatore ad una collezione di oggetti (vedi esempio), se dovessi fare un metodo push, questo metodo devo marcarlo come const?
A rigor di logica sì. visto che non modificando nessun oggetto di invocazione, provoca comunque side-effect indirettamente.
A rigor di logica no visto che logicamente l'oggetto e' stato modificato.
Il fatto che poi tu riesca a modificare un oggetto puntato (ma non il puntatore stesso) secondo me e' poco rilevante o, se preferisci, un dettaglio implementativo.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2012, 23:59   #8
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Quando si parla di c++, non si dice metodo ma funzione.
Si possono usare indifferentemente entrambe le forme, in C++ vogliono dire la medesima cosa.

Quote:
Una sola volta mi pare di aver visto la parola method nel libro di stroustrup e, se non sbaglio, si riferiva ad una funzione ereditata che fa l'overriding.
Sapessi quante volte sono stato bachettato io perchè usavo la parola metodo. Se parli sui canali irc iniziano a dirti, "che cosa è un metodo in c++?", "Io non so cosa è un metodo, a cosa ti riferisci?".. ahahah
Scusate lo sfogo
La prima che dice Stroustroup quando introduce le funzioni membro, dice che si chiamano 'funzioni membro' o 'metodi'. Ne piu' ne meno.
Quando qualcuno vuol fare il gradasso su irc e ti chiede cos'e' un metodo puoi pure dargli un link rapidshare ad una copia del libro .

Al di la' di questo il resto del mondo usa il termine metodo, per cui tanto vale usare un linguaggio comune.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2012, 00:02   #9
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Sono d'accordo con la tua descrizione. Ma non penso che sia solo uno sciocco gioco di termini, perchè se una funzione membro la chiami metodo, come identifichi una funzione globale? Metodo globale?
... 'funzione' ? O 'funzione non membro, se occorre evidenziare la differenza.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2012, 11:30   #10
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Non pensavo di tirare su una discussione così ampia su una cosa così poco rilevante. Comunque mi rimangio la bacchettata che ho fatto e dico ognuno usi la terminologia che preferisce (ovviamente). Affari suoi.

Quote:
Originariamente inviato da marco.r Guarda i messaggi
La prima che dice Stroustroup quando introduce le funzioni membro, dice che si chiamano 'funzioni membro' o 'metodi'. Ne piu' ne meno.
Nella mia edizione (special edition) del libro di Stroustrup non c'è scritto quello, ma testuali parole: "A virtual member function is sometimes called a method" .
Qui mi fermo.
Bye
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200

Ultima modifica di __ZERO_UNO__ : 11-07-2012 alle 11:33.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2012, 14:24   #11
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Non pensavo di tirare su una discussione così ampia su una cosa così poco rilevante. Comunque mi rimangio la bacchettata che ho fatto e dico ognuno usi la terminologia che preferisce (ovviamente). Affari suoi.


Nella mia edizione (special edition) del libro di Stroustrup non c'è scritto quello, ma testuali parole: "A virtual member function is sometimes called a method" .
Qui mi fermo.
Bye
doh, guardando il glossario di Stroustrup non posso che darti ragione. La mia copia del libro e' in italiano (peccati di gioventu'), ed evidentemente e' stata tradotta in modo infelice.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2012, 14:33   #12
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da marco.r Guarda i messaggi
La mia copia del libro e' in italiano (peccati di gioventu')...
...
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2012, 23:26   #13
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12859
Uno che ha fatto un linguaggio così orribile non dovrebbe parlare di cosa è una funzione o un metodo

Edit: oddio l'ho postato sul serio

Ultima modifica di WarDuck : 12-07-2012 alle 23:31.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2012, 08:20   #14
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Uno che ha fatto un linguaggio così orribile non dovrebbe parlare di cosa è una funzione o un metodo

Edit: oddio l'ho postato sul serio
Se ti candidi ti voto come presidente del consiglio
Per quanto riguarda la sottigliezza metodo/funzione...
"o sono caduto o ho caduto, sempre in terra sono andato" ovverosia l'importante è capirsi.
La parola di Stroutsup non è vangelo e al mio paese "A virtual member function is sometimes called a method" questo significa che una funzione membro virtual si può chiamare anche metodo. In Java sono tutte virtual e quindi sono tutti metodi. In c++ non lo sono, ma comunque a livello di comprensione il discorso fila lo stesso. Per fare i perfettini, abbiamo sprecato tonnellate di byte per scrivere corbellerie che non tolgono né tanto meno aggiungono nulla al post originario.
Per quanto riguarda const...
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
Qui c'è una definizione e un esempio che mi pare sufficientemente esplicativo
PS
Quanto preferisco il vecchio C, liscio liscio e semplice.
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
ingframin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati Oracle AI World 2025: l'IA cambia tutto, a parti...
28 Offerte Amazon da non perdere: smartp...
X torna a crescere in Europa: +7 milioni...
NVIDIA festeggia 25 anni in Corea: RTX 5...
Lucca Comics 2025: dal Giappone alla Fra...
Agli italiani non piace la fibra: costi ...
SK hynix: HBM, DRAM e NAND completamente...
Ring porta in Italia videocamere e video...
Windows 11 e 10: finalmente risolto il p...
TEE.fail è l'attacco che scardina...
Cameo fa causa a OpenAI: il nome del nos...
HyperOS 3 arriva anche su Xiaomi 15: int...
Telegram, Pavel Durov lancia Cocoon: l’i...
Dai suicidi ai nuovi limiti: Character.A...
Offerte Amazon per potenziare il PC: sup...
Toyota trasforma la sua auto più ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v