nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Sicuramente non è spiegato affatto bene ... e quindi potrebbe anche voler dire altro ... attenderemo lumi ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
AldoBaldo (Member)
Guru
Messaggi: 700
Iscritto: 08/01/2015
|
A livello di pura ipotesi... siccome intende diminuire un oggetto counter e non diminuire un contatore, e dato che un oggetto counter viene inizializzato (come da consegna) a zero ed ha solo un metodo per incrementarlo, non è possibile avere oggetti counter con valore minore di zero (giusto?).
Inoltre, e mi contraddico, non è necessario modificare direttamente la proprietà val, visto che si vuole che la funzione "esterna" produca un nuovo oggetto e non un puntatore o un reference all'oggetto ricevuto come parametro.
Date queste due premesse, io risolverei in un modo di questo genere...
Codice sorgente - presumibilmente Plain Text |
Edit: anzi, no, che poi mi sgridate!
Ultima modifica effettuata da AldoBaldo il 14/05/2017 alle 23:34
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti. |
|
Djot (Normal User)
Rookie
Messaggi: 28
Iscritto: 14/02/2017
|
Ragazzi , purtroppo ciò che ho scritto era proprio la consegna dell'esercizio , nemmeno io riesco a capire cosa voglia di preciso , penso che si debba definire una funzione (esterna alla classe) che agisce direttamente su un oggetto Counter , ma non capisco come procedere.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Hai già avuto chiuso un thread per la richiesta di soluzione di un esercizio.
Se non proponi qualcosa di tuo, non si può fare l'esercizio al posto tuo ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Djot (Normal User)
Rookie
Messaggi: 28
Iscritto: 14/02/2017
|
L'idea era di considerare val come un valore public , il codice da me scritto è questo :
Codice sorgente - presumibilmente C++ |
#include <iostream> using namespace std; class Counter{ public: int val; Counter(){ val = 0; } void Inc(){ val++; } int Read(){ return val; } }; int Function(Counter c1){ if(c1.val > 0) return (c1.val-1); else if(c1.val == 0) return 0; }
|
Ma non mi convince assolutamente
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
No, non mi sembra corretto.
Anche perché, per quello che si capisce, devi restituire un nuovo oggetto Counter a partire dal primo
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
AldoBaldo (Member)
Guru
Messaggi: 700
Iscritto: 08/01/2015
|
Rendendo val una proprietà comune degli oggetti di classe Counter non avresti più la garanzia che val sia sempre e comunque >= 0, dunque direi che è una soluzione impraticabile, in contrasto con le richieste della consegna.
Nessuno ti impedisce invece di rilevare in Function() il valore di val tramite c1.Read(), quindi lavorare sulla copia di val appena letta.
Considera inoltre che la consegna ti chiede di fare in modo che la funzione esterna alla classe dato un contatore [...] ne restituisca un altro. Il che significa che Function() non deve restituire int, bensì un oggetto di classe Counter che non sia quello passato come parametro. Ovviamente si tratterebbe di un oggetto temporaneo, ma questo pare non importare. In altre parole...
Codice sorgente - presumibilmente C/C++ |
Counter Function( const Counter &c1 ) {
Counter contatore; // oggetto da restituire
int valore = c1.Read();
// si fa quel che si deve fare sul valore di c1 e sull'oggetto da restituire
return contatore; // si restituisce una copia dell'oggetto temporaneo di classe Counter
}
|
Nota che ho usato un reference come parametro, ma non è indispensabile.
Per potere usare un reference costante, occorre che Read() sia dichiarata così:
Codice sorgente - presumibilmente C/C++ |
int Read() const { return val; }
|
P.S. Non è la soluzione, sono solo indizi (spero utili, spero corretti). Ultima modifica effettuata da AldoBaldo il 15/05/2017 alle 14:54
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti. |
|
AldoBaldo (Member)
Guru
Messaggi: 700
Iscritto: 08/01/2015
|
Ah, dal momento che gli oggetti di classe Counter non possono essere portatori di valori minori di zero, perché non raddoppiarne la capacità usando per val il tipo unsigned int anziché int?
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti. |
|