Quote:
Originariamente inviato da Brizio92
Salve a tutti, mi sono abbastanza scervellato per cercare di capire come far funzionare due funzioni membro che mi vengono richieste di realizzare in una classe Vettore.
Per prima cosa vi posto il codice della mia classe:
http://pastebin.com/F6YVqH6d
Dove "PacchettoRegalo" è una semplice classe fatta di 3 variabili membro, Destinatario, Peso e Forma (due char e un float).
Ora, mi viene chiesto di implementare due funzioni:
- funzione Access() che ha la stessa funzionalità della funzione di accesso [] ma lancia una eccezione (definita mediante classe) nel caso in cui il valore dell’indice specificato in ingresso alla funzione non appartenga all’intervallo [0,Nelem]
- funzione Elimina, che elimina dal vettore tutti i pacchetti di peso maggiore di mezzo chilo.
Per la funzione access, il mio problema non è creare la classe eccezione, ma come strutturare la funzione stessa.
Per quando riguarda la funzione Elimina, avevo pensato di fare l'overload degli operatori di comparazione < e > nella classe PacchettoRegalo, rispetto al valore della variabile Peso, ma comunque non so come farei ad eliminarli dal vettore (è certamente una lacuna mia, ma proprio non capisco come eliminare un elemento da un vettore).
Vi ringrazio in anticipo per il vostro aiuto 
|
Forse ho capito male, ma la funzione Access() sembra una minchiata in confronto a quello che hai già fatto

Devi solo aggiungere, a quello che c'è già in operator[], un controllo sull'indice.
Per Elimina, non serve fare overload di operatori, basta confrontare A.peso > B.peso, ovviamente se peso è un double o cmq un tipo per cui è già un operatore > o <.
Poi non avrebbe senso scrivere
Codice:
A pacco1, pacco2;
...
bool z = pacco1 > pacco2;
Cioè: come confronto i pacchetti? In base al peso? O al volume? O al valore? Secondo me è concettualmente sbagliato definire operatori di comparazione per una classe con più caratteristiche comparabili ma eterogenee tra loro.
Passando alla funzione Elimina() vera e propria invece, deve creare un altro array con new, della dimensione giusta, e ci deve infilare i pacchetti che rispettano il predicato. Senza dimenticarsi di cancellare il vecchio array, puntato da V, prima di assegnare a V l'indirizzo del nuovo array.