Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    2

    [C++] Vettore eterogeneo

    Ciao ragazzi, sono nuovo del forum quindi spero sia la sezione giusta.
    Mi è stato assegnato il seguente esercizio da implementare in C++.

    "Un'agenzia del lavoro intende effettuare una ricerca tra tutti i disoccupati che nell'ultimo anno sono stati assunti tramite la propria struttura.
    La distinzione è fatta tra DIPLOMATI e LAUREATI.
    I DIPLOMATI si distinguono in base al tipo di diploma conseguito (Liceo, Industriale, Commerciale, Professionale).
    I LAUREATI si classificano per settore (Scientifico, Umanistico, Economico).
    Implementare un programma per l'agenzia del lavoro che permetta di distinguere i diversi tipi di disoccupati. In particolare progettare una gerarchia di classi in cui la classe base è Disoccupato, mentre le classi derivate sono Diplomato e Laureato (TUTTE con attributi privati).
    Infine implementare un main() che permetta di calcolare la percentuale di diplomati e laureati sul totale (N=350) dei disoccupati iscritti all'agenzia."

    Ho definito le classi così:

    codice:
    class Disoccupato{
        string nome;
        int studio;
    public:
        void Set(string n, int s)
        {
            nome=n;
            studio=s;
        };
        void Get(string& no, int& st)
        {
            no=nome;
            st=studio;
        };
    };
    
    
    class Diplomato:public Disoccupato
    {
        string tipo;
    public:
        void SetDipl(string n, int s, string t)
        {
            Set(n, s);
            tipo=t;
        };
        void GetDipl(string& no, int& st, string& ti)
        {
            Get(no, st);
            ti=tipo;
        };
    };
    
    
    class Laureato:public Disoccupato
    {
        string tipo;
    public:
        void SetLaur(string n, int s, string t)
        {
            Set(n, s);
            tipo=t;
        };
        void GetLaur(string& no, int& st, string& ti)
        {
            Get(no, st);
            ti=tipo;
        };
    };
    Penso non ci siano problemi (il flag intero s lo prenderò da tastiera ed assume valore 1 per il Diplomato, 2 per il Laureato).

    I problemi nascono nel caricamento del vettore e poi nel tentativo di stamparlo a video per verificare che il caricamento sia andato bene.
    La mia domanda è:
    E' possibile creare un vettore di 350 Disoccupato che contenga sia elementi del tipo Diplomato che del tipo Laureato?
    Perchè avevo pensato all'idea di poter creare un vettore eterogeneo, in cui tutti gli elementi appartengono alla stessa classe base (quindi tutti quanti hanno un nome n e un flag s), ma poi ognuno può avere degli attributi tipici della sua classe derivata (il tipo di diploma/laurea in questo caso).

    L'esercizio sarebbe semplice se ci fosse la possibilità di fare due vettori diversi, ma dalla traccia capisco che non è così (parla di ricerca tra tutti i disoccupati)..

    Grazie in anticipo a chiunque proverà a rispondermi

  2. #2
    Ogni classe derivata è perfettamente compatibile con la classe da cui deriva, da essa infatti ne eredita la struttura e la estende.
    Ereditarietà
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    2
    Quindi è legittimo un caricamento impostato così?

    codice:
    void carica(Disoccupato A[]){
    	int i, j=0, k=0, s;
    	string n, t;
    	Diplomato* D = new Diplomato();
    	Laureato* L = new Laureato();
    	for(i=0;i<N;i++)
    	{
    		do
    		{
    		cout<<"Il disoccupato e:\n1 Diplomato\n2 Laureato"<<endl;
    		cin>>s;
    		}
    		while(s!=1 && s!=2);
    		if(s==1)
    		{
    			cout<<"Nome: ";
    			cin>>n;
    			do
    			{
    			cout<<"Tipo di diplomato: ";
    			cin>>t;
    			}
    			while(t!="Liceo" && t!= "Commerciale" && t!= "Industriale" && t!= "Professionale");
    			D[j].SetDipl(n, s, t);
    			j++;
    		}
    		else
    		{
    			cout<<"Nome: ";
    			cin>>n;
    			do
    			{
    			cout<<"Tipo di laureato: ";
    			cin>>t;
    			}
    			while(t!="Scientifico" && t!= "Umanistico" && t!= "Economico");
    			L[k].SetLaur(n, s, t);
    			k++;
    		}
    	}
    	for(i=0;i<j;i++)
    		A[i]=D[i];
    	for(i=j;i<N;i++)
    		A[i]=L[i-j];
    };
    Non conoscendo quanti Diplomati e Laureati ci siano, ho pensato alla funzione new che alloca dinamicamente la memoria.
    E se volessi stampare a video il vettore risultante da questa funziona carica()?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.