Far interagire due oggetti della stessa classe

di il
6 risposte

Far interagire due oggetti della stessa classe

Salve sto scrivendo un prigramma che fa interagire tra loro oggetti di classi uguali (e anche diverse, ma più avanti) e ho un problema: nella classe (esempio) Giocatore ci metto una funzione void paga che serve a far pagare il giocatore che deve dei soldi ad un altro, e come argomenti devo metterci un puntatore ad un altro giocatore. Solo che ho problemi con questo perché non capisco cosa devo dare come input alla funzione. Se ho

Giocatore alex(1000);
Giocatore bob(1000);
Dove 1000 è l'unico marametro del costruttore che indica i soldi del giocatore, alex deve 100 euro a bob. La funzione paga l'ho scritta così

void Giocatore::paga(int denaro,Giocatore &giocatore)
{
  soldi-=denaro;
  giocatore.ricevi(denaro);
}
void Giocatore::ricevi(int denaro)
{
  soldi+=denaro;
}
Cosa devo passare alla funzione paga? Oppure dovrei scrivere così?

void Giocatore::paga(int denaro,Giocatore* &giocatore)
E in questo caso cosa dovrei passare alla funzione paga?

6 Risposte

  • Re: Far interagire due oggetti della stessa classe

    La prima versione col reference va più che bene. Ma se hai l'obbligo di usare un puntatore basta:
    
    void Giocatore::paga(int denaro,Giocatore* giocatore)
    {
      if (giocatore == nullptr) return;
      soldi-=denaro;
      giocatore->ricevi(denaro);
    }
    
  • Re: Far interagire due oggetti della stessa classe

    Il mio problema è nato perché i giocatori li ho anche inseriti in un array e volevo provare ad avere lo stesso risultato sia passando l'oggetto, che l'indirizzo nell'array. Se l'array è
    Giocatore giocatori[2]={alex,bob};
    Volevi che
    alex.paga(100,bob);
    Fosse uguale a
    alex.paga(100,giocatori[1]);
    Facendo un bel po' di prove alla fine però ho cambiato
    Giocatore giocatori[2]={alex,bob};
    In
    Giocatore* giocatori[2]={&alex,&bob};
    E ora funziona, ma alla funzione devo passare *giocatori[1], e questo mi confonde le idee perché non ho ancora ben chiaro cosa significhi * dopo un tipo (int*) e penso che signifuchi puntatore, poi * prima di qualcosa, quindi *giocatori[1] non capisco bene cosa significhi
  • Re: Far interagire due oggetti della stessa classe

    Int* numero e int *numero sono i due modi equivalenti di dire "numero è un puntatore a int" in fase di definizione.
    Fuori da quel contesto, numero resta un puntatore a int, mentre *numero indica "prendi il puntatore numero e dammi cosa punta".
    Questi però sono argomenti base che vengono ben prima della OOP.
  • Re: Far interagire due oggetti della stessa classe

    Quindi *numero restituisce il valore o l'oggetto a cui punta, invece &numero restituisce l'indirizzo di memoria giusto?
  • Re: Far interagire due oggetti della stessa classe

    Si, attenzione però che in generale vale il contesto di chiamata. Ad esempio
    
    void Giocatore::paga(int denaro,Giocatore &giocatore)
    
    qui la & non indica il voler prendere l'indirizzo di giocatore, ma stabilire un reference all'oggetto passato quando fai la chiamata a funzione.
  • Re: Far interagire due oggetti della stessa classe

    Almeno questo lo sapevo . Grazie del chiarimento
Devi accedere o registrarti per scrivere nel forum
6 risposte