Array di oggetti

di Anonimizzato13717 il
9 risposte
Salve a tutti

sto cercando di implementare una classe di squadre (di calcio o pallacanestro ecc)

il mio dubbio è su come indicizzare le squadre, ovvero gli ogetti di questa classe

ovvero inizializzare un vettore che contiene gli oggetti

ad esempio


class team{
public:
team(string,int, int);
private:
//attributi..

};

const int N=16

team** t;
t = new team*[N];
t[0]=team("squadra1",0,0);
t[1]=team("squadra2",0,0);
t[2]=team("squadra3",0,0);

t[15]=team("squadra16",0,0);


//ecc

il problema è che sugli elementi di t non riesco ad applicare le funzioni di classe
, visto che t non fa parte della classe.

come posso risolvere il problema?

9 Risposte

  • Non ho capito il problema ... le singole istanze sono t[0], t[1] ... non devi lavorare su t ...
  • Ho risolto così

    anziche inizializzare un doppio puntatore ho inizializzato un array di oggetti di classe team
    
    team t[N];
    
    ho inizializzato le squadre
    
    team team1("squadra1",0,0);
    team team2("squadra2",0,0);
    .
    .
    team team16("squadra16",0,0);
    
    e poi ho usato il costruttore copia per assegnare gli oggetti all'array
    
    t[0]=team1;
    t[1]=team2;
    .
    .
    
    t[15]=team16;
    
  • oregon ha scritto:


    Non ho capito il problema ... le singole istanze sono t[0], t[1] ... non devi lavorare su t ...
    l'obiettivo è indicizzare gli oggetti, cioè lavorare con t

    la comodità è quella di poter chiamare le funzioni di classe in questo modo

    t.funzione_di_classe();
  • Perché "comodità" ?

    Nel primo caso le chiamavi con

    t[0]->funzione_di_classe();

    Non vedo problemi ...
  • Mi spiego meglio

    poniamo il caso che non abbia un array di oggetti ma abbia semplicemente istanziato un
    certo numero di oggetti della classe team

    team t1,t2,t3, t4 ......tN;

    volendo usare una funzione di classe su tutti gli oggetti dovrei fare

    t1.funzione();
    t2.funzione();
    t3.funzione();
    t4.funzione();
    .
    .
    tN.funzione();

    invece avendo un array t che contiene gli oggetti potrei scrivere

    for (i=0;i<N;i++)
    t.funzione();

    risparmiando un bel pò di righe di codice
  • Ti eri spiegato ma forse non hai compreso quello che ti ho scritto.

    Nel tuo primo post, quello con il vettore di puntatori a team, hai scritto

    "il problema è che sugli elementi di t non riesco ad applicare le funzioni di classe"

    mentre io ti ho scritto che non era così.
  • Ok

    quindi, se ho capito bene, usando il doppio puntatore (come nel primo codice che ho postato)

    basta fare così (supponendo che il puntatore sia p)
    
    for (i=0;i<N;i++)
      p[i]->funzione();
    
  • Sì ... come ti ho scritto e come si fa in C/C++.

    Studia l'operatore ->
  • Okay

    grazie per la risposta
Devi accedere o registrarti per scrivere nel forum
9 risposte