PDA

Visualizza la versione completa : [C++] Matrice di Oggetti


Esphelex
05-06-2010, 23:04
Salve a tutti,
sono alle prese con questo problema:

devo creare un sistema per la gestione di una compagnia aerea in C++.
Ho creato una classe Aereo, che è costituita da una matrice di Posti (altra classe).
Ora allora dinamicamente la matrice:



posti = new Posto*[file];

for(int i = 0; i<file; i++)
posti[i]= new Posto[colonne];

ora però sorge un problema:
come faccio ad inizializzare i posti direttamente con il costruttore??
I posti hanno un numero e una posizione (Finestrino, centro, corridoio).
già mi da errore se definisco un costruttore con dei parametri (infatti non mi è concesso di fare new Posto(a,b,c)[colonne]; )
Devo per forza crearmi un metodo per farlo??

Qualche suggerimento??

Grazie :)

Ippo343
06-06-2010, 23:11
Purtroppo il C++ non ti permette di richiamare un costruttore con dei parametri quando usi la new per creare un array. Ti serve un costruttore senza argomenti, e poi devi inizializzarli singolarmente con un metodo.

Esphelex
08-06-2010, 17:57
Grazie per la risposta.

Mi hanno appena detto che programmare ad oggetti utilizzando matrici di oggetti è molto "fondamenti" e non "oop"...
ora mi viene una tristezza dopo tutte le ore che ho perso per farlo :(

MItaly
08-06-2010, 21:03
Originariamente inviato da Ippo343
Purtroppo il C++ non ti permette di richiamare un costruttore con dei parametri quando usi la new per creare un array. Ti serve un costruttore senza argomenti, e poi devi inizializzarli singolarmente con un metodo.
Va detto tuttavia che è possibile allocare prima la memoria necessaria e poi usare l'operatore placement new per richiamare i costruttori uno alla volta. Non so poi però se il delete[] sia in grado di fare l'operazione inversa senza problemi...

shodan
08-06-2010, 21:09
No, delete[] non può essere usato col placement new.
Occorre richiamare esplicitamente il distruttore di ogni singolo oggetto (e a volte la sintassi varia da compilatore a compilatore), e poi usare operator delete sul blocco di memoria.

Loading