Rieccomi ragazzi.
Ho provato a implementare le varie classi della traccia.
Pensando di fare così :
1) la classe che mi fornisce la traccia l'ho trascritta cosi com'è.
2) Ho scritto la classe AccessibleOS1 e AccessibleOS2 ereditando da OperatingSystem. Quindi ho:
enum TipoSO { OS1=0, OS2 };
enum User { A=0, U, G};
class AccessibleOS1 : public OperatingSystem {
     public:
	virtual list<string> listFiles(string path) ;
	virtual bool removeFile (string path) ;
	virtual string openFile (string path) ;
	virtual bool createDirectory (string path) ;
	virtual bool runCommand (string command) ;
	virtual bool installPackage (string pkgName) ;
// ho aggiunto la funzione getOperating.. qui nel public     ( mi turbano però gli argomenti che prende la funzione , User e TipoSO... non ho capito bene come usarli )
	OperatingSystem* getOperatingSystem ( User u, TipoSO tipo  ); 
// ho pensato di aggiungere nel private un puntatore di tipo OperatingSystem, che restituirò con la famosa funzione getOperatingSystem
   
 private:
		
	OperatingSystem  *os;
};
la classe AccessibleOS2 è scritta identica.
La traccia ora dice:   - fornire l'implementazione completa di una massimo di 3 nuove classi che sfruttino il polimorfismo per proteggere o sovrascrivere (overiding) il comportamento delle classi AccessibleOS1 e AccessibleOS2. Poi ci sono le varie tipologie ( User, Administrator e Guest)
Io avevo pensato di scrivere appunto queste 3 classi sovrascrivendo solo le varie funzioni che mi servono ( ad esempio in administrator servono tutte).
La cosa che però non capisco proprio è come usare la funzione getOperatingSystem  cioè riceve un tipo User e un tipo TipoSO. Se  non sbaglio il prof ha detto che questi potevo considerarli come due enum, e in base al caso far scegliere correttamente al sistema quali permessi dare. Quindi non so se è necessario creare le 3 classi ti tipologia degli utente o baste l'enum User..
Voi avete qualche piccola idea? grazie in anticipo a chi risponderà