Neofita degli oggetti [C++]

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
salvopappy
Prode Principiante
Messaggi: 27
Iscrizione: domenica 25 maggio 2014, 16:05
Distribuzione: Ubuntu 14.04

Neofita degli oggetti [C++]

Messaggio da salvopappy »

Salve a tutti. :D
Sto cercando di imparare la programmazione ad oggetti e mi sono imbattuto in un problema (sicuramente banale) che non riesco a risolvere. :muro:
In pratica sto cercando di ricreare il giochino di PONG con allegro e ho creato due classi: una per la palla e una per i cursori. Il problema è che voglio far interagire le due classi. Mi spiego meglio: quando la x della palla è più piccola della x del cursore la palla cambia la velocità e torna indietro.

Codice: Seleziona tutto

Palla::muovi(){
        if(x<l'attributo della classe Cursore) xv=-4;
}
E non so cosa mettere come condizione. Ho provato con Cursore.x o Cursore->x. Non so come specificare nel metodo che l'attributo che sto cercando è di un'altra classe.
Consigli ed aiuti?
Grazie in anticipo :ciao:
Avatar utente
Massimog
Rampante Reduce
Rampante Reduce
Messaggi: 7342
Iscrizione: martedì 2 dicembre 2008, 18:17
Desktop: GNOME 3.16
Distribuzione: Gentoo x86_64
Sesso: Maschile
Località: Osimo(AN)

Re: Neofita degli oggetti [C++]

Messaggio da Massimog »

Ma ti basta passarli al metodo questo valore
Acer 5920G con Gentoo 64bit + Ubuntu 12.04 LTS Precise Pangolin 64bit + Windows 7 64 bit | Stampante Epson PX710W | Router Netgear DGN2000
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Neofita degli oggetti [C++]

Messaggio da melfnt »

L'attributo non è "della classe cursore", bensì "di un oggetto della classe cursore". Sono due cose differenti.
Immagino tu abbia creato (almeno) un oggetto di classe cursore, ebbene, tutti ogni oggetto di quella classe ha il suo attributo, che può essere ottenuto con oggetto.attributo se è pubblico, oppure con un metodo (solitamente getAttributo() ) se è privato.

Come renderlo visibile in quel metodo dipende dalla scelta di programmazione: puoi tenere un oggetto di classe cursore come variabile globale e richiamarne il metodo get da dentro Palla::muovi(), oppure richiamarlo prima e passare l'attributo come parametro a Palla::muovi come suggerito da Massimog.

Ti faccio un esempio:

Codice: Seleziona tutto

class Cursore
{
    private int attributoCheTiserve;
    public int getAttributo ()
    {
         return this->attributoCheTiServe;
    }
}

class Palla
{
    private int x,xv;
    void muovi ();
}

Cursore cursoreGlobale;

Palla::muovi(){
        if(x<cursoreGLobale.getAttributo()) xv=-4;
}
salvopappy
Prode Principiante
Messaggi: 27
Iscrizione: domenica 25 maggio 2014, 16:05
Distribuzione: Ubuntu 14.04

Re: Neofita degli oggetti [C++]

Messaggio da salvopappy »

Ah... Soltanto adesso ho capito l'esempio. Quindi devo creare un oggetto nella classe che avrà effetto globale, giusto?
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: Neofita degli oggetti [C++]

Messaggio da melfnt »

Non capisco cosa intendi con "effetto globale", mi sembra che tu abbia le idee molto confuse.
Quando tu crei una classe, definisci un nuovo tipo di dato. Quindi, quando fai

Codice: Seleziona tutto

class Cursore
{
    private int attributoCheTiserve;
    public int getAttributo ()
    {
         return this->attributoCheTiServe;
    }
}
Dici al compilatore che d'ora in poi esisterà la classe cursore, con i suoi attributi ed i suoi metodi. Potrai creare oggetti di classe Cursore con questa sintassi:

Codice: Seleziona tutto

Cursore c;
come dichiareresti una variabile di tipo int:

Codice: Seleziona tutto

int x;
`Cursore` è il tipo di dato, `c` è il suo nome.
Se la dichiarazione ha visibilità globale ( e cioè se non lo definisci in una funzione specifica), potrà essere modificato e scritto in tutte le funzioni.
Questo è il primo metodo per ottenere un valore appartenente ad un oggetto di classe Cursore che non si trova nella funzione corrente.

Codice: Seleziona tutto

Palla::muovi(){
        if(x<cursoreGLobale.getAttributo()) xv=-4;
}
Altrimenti, puoi passare tale valore come parametro alla funzione, così come passeresti un intero:

Codice: Seleziona tutto

int somma (int x, int y)
{
    return x+y;
}
La tua diventerebbe:

Codice: Seleziona tutto

Palla::muovi( Cursore c )
{
        if(x<c.getAttributo()) xv=-4;
}
dove c è un oggetto di classe Cursore passato come parametro.

(;
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 12 ospiti