Untitled
unknown
c_cpp
4 years ago
3.4 kB
10
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...