Untitled
unknown
c_cpp
4 years ago
3.4 kB
5
Indexable
/*3) Realizzare una classe Articolo, la classe deve avere una variabile intera per indicare il numero identificativo del prodotto, la sua quantità (sempre intera) e una variabile booleana che indica se il prodotto è disponibile. La quantità e la disponibilità devono essere private e bisogna creare un metodo per leggere sia una che l'altra variabile. Creare infine una funzione che imposta la quantità, controllando che sia maggiore o uguale a 0 e imposta la variabile disponibilità a vera se la quantità è maggiore di zero. Inserire all'interno di una classe contenitore 100 articoli con codici identificativi tutti diversi che vanno a 1 a 100 e inserire una quantità "casuale" usando la seguente formula: (i+3)*5%(100-i), dove i indica il codice identificativo del prodotto. Eliminare dal contenitore tutti gli articoli terminati e stampare quanti elementi sono stati eliminati.*/ #include "ContenitoreDinamico.h" class Item { public: int id; //IMPORTANTISSIMO, SI COMPORTA COME SE FOSSE COME UN COSTRUTTORE IN QUESTO CASO, NON POTREMMO INIZIALIZZARE LE VARIABILI DENTRO LA TEMPLATE //DOPPIO CONTROLLO SULLE VARIABILI, UN PRIMO CONTROLLO VIENE FATTO NELLA TEMPLATE void operator = (Item istance) { this->id = istance.id; this->quantity = istance.quantity; if (this->quantity > 0) this->availability = true; else this->availability = false; } //SECONDO CONTROLLO SULLE VARIABILI, FATTO DIRETTAMENTE NELLA CLASSE void setQuantity(int value) { if (value >= 0) { this->quantity = value; } if (quantity > 0) this->availability = true; else this->availability = false; } int getQuantity() { return this->quantity; } bool getAvailability() { return this->availability; } private: int quantity; bool availability; }; //NECESSARIA PER INSERIRE void addObject(int idObjectValue,int quantityObjectValue, DinamicContainer<Item>& templateIstance) { Item itemIstance; itemIstance.id = idObjectValue; itemIstance.setQuantity(quantityObjectValue); templateIstance.add(itemIstance); } //Overloading degli operatori ostream& operator <<(ostream& out, Item itemIstance) { cout << endl; out << "id = " << itemIstance.id << " quantity = " << itemIstance.getQuantity() << " availability = " << itemIstance.getAvailability(); cout << endl; return out; } //FUNZIONE NECESSARIA CHE MI SERVIRA' PER FARE UN COMPARE TRA L' ISTANZA DELLA MIA CLASSE E L' ISTANZA DELLA TEMPLATE bool operator ==(Item firstTemplateIstance, Item secondTemplateIstance) { return (firstTemplateIstance.getAvailability() == secondTemplateIstance.getAvailability()); } int main() { DinamicContainer<Item> templateIstance = DinamicContainer<Item>(100); for (int i = 0; i < 100; i++) addObject((i + 1), ((i + 3) * 5 % (100 - i)), templateIstance); cout << templateIstance; for (int i = 0; i < 100; i++) { Item flagItemIstance; flagItemIstance.setQuantity(0); //Variabile d' appoggio avente availability = 0; bool c = (flagItemIstance == templateIstance.getElements(i)); //Faccio il compare di tutte le istanze della template con la variabile flaggata if (c == true) {//Se true, ovvero se ho un' istanza della template con availability = 0 cout << templateIstance.getElements(i); //La templateIstance.removeOne(templateIstance.getElements(i)); //E la rimuovo } } }
Editor is loading...