codice:
#include <iostream>#include <sstream>
#include <limits>
using namespace std;


class Applicazione {
	private:
		long id;
		string nome;
		string descrizione;
	public:
		Applicazione(long id, string nome, string descrizione)
			:id(id), nome(nome), descrizione(descrizione) {}
		
		string to_string(void);
};


string Applicazione::to_string(void) {
  ostringstream oss;
  oss << id << ") " << nome << endl << descrizione;
  return oss.str();
}


class Store {
	private:
		Applicazione *app[100];
		int n;
	public:
		Store():n(0) { }
		~Store() {
			for(int i = 0; i < this->n; ++i)
				delete this->app[i];
		}
		
		void aggiungi_applicazione(void);
		
		void stampa_applicazioni(void);
};


void Store::aggiungi_applicazione(void) {
	long id;
	string nome, descrizione;
	cout << "Inserisci l'id dell'applicazione: ";
	cin >> id;
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	cout << "Inserisci il nome dell'applicazione: ";
	getline(cin, nome);
	cout << "Inserisci una descrizione dell'applicazione:" << endl;
	getline(cin, descrizione);
	this->app[(this->n)++] = new Applicazione(id, nome, descrizione);
}


void Store::stampa_applicazioni(void) {
	for(int i = 0; i < this->n; ++i)
		cout << this->app[i]->to_string() << endl;
}
	


int main() {
	Store s;
	s.stampa_applicazioni();
	s.aggiungi_applicazione();
	s.stampa_applicazioni();
	s.aggiungi_applicazione();
	s.stampa_applicazioni();
	return 0;
}