Untitled

mail@pastecode.io avatar
unknown
c_cpp
3 years ago
3.4 kB
3
Indexable
Never
/*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
		}
	}
}