Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Classe Counter
Forum - C/C++ - Classe Counter - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:06
Domenica, 14/05/2017
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à.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 23:32
Domenica, 14/05/2017
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

  1. // (codice rimosso)



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.
PM Quote
Avatar
Djot (Normal User)
Rookie


Messaggi: 28
Iscritto: 14/02/2017

Segnala al moderatore
Postato alle 11:40
Lunedì, 15/05/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.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:52
Lunedì, 15/05/2017
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à.
PM Quote
Avatar
Djot (Normal User)
Rookie


Messaggi: 28
Iscritto: 14/02/2017

Segnala al moderatore
Postato alle 12:03
Lunedì, 15/05/2017
L'idea era di considerare val come un valore public , il codice da me scritto è questo :
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Counter{
  5. public:
  6.     int val;
  7.     Counter(){
  8.     val = 0;
  9.     }
  10.     void Inc(){
  11.     val++;
  12.     }
  13.     int Read(){
  14.     return val;
  15.     }
  16. };
  17. int Function(Counter c1){
  18. if(c1.val > 0)
  19.     return (c1.val-1);
  20.     else if(c1.val == 0)
  21.         return 0;
  22. }



Ma non mi convince assolutamente

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:42
Lunedì, 15/05/2017
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à.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 14:51
Lunedì, 15/05/2017
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++

  1. Counter Function( const Counter &c1 ) {
  2.     Counter contatore; // oggetto da restituire
  3.     int valore = c1.Read();
  4.  
  5.     // si fa quel che si deve fare sul valore di c1 e sull'oggetto da restituire
  6.  
  7.     return contatore; // si restituisce una copia dell'oggetto temporaneo di classe Counter
  8. }



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++

  1. 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.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 14:57
Lunedì, 15/05/2017
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.
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo