Progetto c++ Itinerario

di il
76 risposte

76 Risposte - Pagina 2

  • Re: Progetto c++ Itinerario

    Perfetto per ora ci sono, si compila ma logicamente in output non c'è niente
  • Re: Progetto c++ Itinerario

    Ok, all' output ci pensiamo domani o dopo

    Quindi una classe 'Itinerario' userà una stringa per il campo 'nome' e un vector<Luogo> come contenitore di luoghi. Prova a scriverla.
  • Re: Progetto c++ Itinerario

    Class Itinerario{

    string nome;
    vector<Luogo> luoghi;
    luoghi.push_back(12,26);
    luoghi.push_back(35,56);
    luoghi.push_back(15,86);

    }
  • Re: Progetto c++ Itinerario

    Sbagliato! le inizializzazioni non ci devono stare nella classe.
    
    class Itinerario
    {
    public:
    	string nome;
    	vector<Luogo> luoghi;
    };
    
    Ripeto il fatto che la classe è un tipo non è un oggetto, descrive le caratteristiche dell' oggetto che poi verrà istanziato.
    La 'Mucca' è una classe, è l' idea di muccosità che abbiamo in testa. 'Carolina' invece è una mucca specifica, è una istanza, è proprio quella mucca li con le macchie bianche e una stella in fronte.

    Per cui la classe Itinerario prevede un nome ma non ha nessun nome specifico, prevede un array di luogi ma non contiene nessun luogo specifico, saranno le istanze cha avranno un nome e dei luoghi con coordinate specifiche.

    Ora puoi creare degli itinerari (cosa che poi dovrai fare nella classe di test), per ora scrivilo nel main, ad esempio:
    
    	Itinerario* itinerario1 = new Itinerario();
    	itinerario1->nome = "Primo percorso";
    	itinerario1->luoghi.push_back(Luogo(100, 200));
    	itinerario1->luoghi.push_back(Luogo(230, 500));
    	itinerario1->luoghi.push_back(Luogo(20, 300));
    
    Uso l' allocazione dinamica (il new), per ora non soffermiamoci su quest' aspetto, ne parliamo dopo (ti basti sapere per ora che così è più efficiente e si evitano problemi di copia dell' oggetto quando lo metterai in un array).

    Prova a compilare e poi vediamo di migliorarla.
  • Re: Progetto c++ Itinerario

    class Itinerario{
    
    string nome;
    vector<Luogo> luoghi;
    luoghi.push_back(Luogo(12,26));
    luoghi.push_back(Luogo(35,56));
    luoghi.push_back(Luogo(15,86));
  • Re: Progetto c++ Itinerario

    Quindi nel main mi limito a questo:
     class Itinerario
        {
        public:
            string nome;
            vector<Luogo> luoghi;
        };
        
        Itinerario* itinerario1 = new Itinerario();
        itinerario1->nome = "Primo percorso";
        itinerario1->luoghi.push_back(Luogo(100, 200));
        itinerario1->luoghi.push_back(Luogo(230, 500));
        itinerario1->luoghi.push_back(Luogo(20, 300));
  • Re: Progetto c++ Itinerario

    La dichiarazione delle classi va 'prima' del main.
    
    class Itinerario
    {
        public:
            string nome;
            vector<Luogo> luoghi;
    };
    
    int main()
    {    
        Itinerario* itinerario1 = new Itinerario();
        itinerario1->nome = "Primo percorso";
        itinerario1->luoghi.push_back(Luogo(100, 200));
        itinerario1->luoghi.push_back(Luogo(230, 500));
        itinerario1->luoghi.push_back(Luogo(20, 300));
    
      return 0;
    }
    
  • Re: Progetto c++ Itinerario

    Ok, adesso io ho creato l'itinerario1, che passa per quei tre punti.
  • Re: Progetto c++ Itinerario

    Abbiamo detto che poi dovrai fare una classe di test in cui istanzi gli Itinerari, possiamo rendere questa operazione più agevole aggiungendo dei metodi alla classe Itinerario.
    
    class Itinerario
    {
    public:
    	string nome;
    	vector<Luogo> luoghi;
    
    	Itinerario(string nome)
    	{
    		this->nome = nome;
    	}
    
    	void Add(double latitudine, double longitudine)
    	{
    		luoghi.push_back(Luogo(latitudine, longitudine));
    	}
    };
    
    La classe è ancora lontana dall' essere ben fatta (ha tutti i campi pubblici! e questo ti costerebbe la bocciatura ) ma per ora soprassediamo.
    Questa seconda versione è più comoda da usare, ora potresti creare le istanze in questo modo:
    
    	Itinerario *itinerario1 = new Itinerario("Primo percorso");
    	itinerario1->Add(100, 200);
    	itinerario1->Add(230, 500);
    	itinerario1->Add(20, 300);
    
    A questo punto prova a scrivere la classe 'ContenitoreItinerari' potrebbe essere una classe che contiene un elenco di itinerari quindi un vector di 'Itinerario'
  • Re: Progetto c++ Itinerario

    Per ora la implemento sempre nel main?
  • Re: Progetto c++ Itinerario

    Si, facciamo prima, poi farai i file separati .h e .cpp, uno per ogni classe.
  • Re: Progetto c++ Itinerario

    class ContenitoreItinerari
    {
    public:
        
        vector<ContenitoreItinerari>Itinerario;
        
    };
        
        
  • Re: Progetto c++ Itinerario

    Fuochino, deve essere un vettore di itinerari.
  • Re: Progetto c++ Itinerario

    class ContenitoreItinerari
    {
    public:
        
        vector<ContenitoreItinerari>itinerari;
        
        
    };
  • Re: Progetto c++ Itinerario

    Ancora sbagliato, Il nome al plurale è ok, ma il vector è un contenitore di 'Itinerario'
    
    class ContenitoreItinerari
    {
    public:
    	vector<Itinerario> itinerari;
    }
    
    Prima ti ho detto qualcosa sull' allocazione dinamica, ritratto tutto, per ora è una complicazione che è meglio evitare (ma poi ci torniamo).
    Quindi per creare gli itinerari facciamo cosi (senza il new e le '->'):
    
    	Itinerario itinerario1("Primo percorso");
    	itinerario1.Add(100, 200);
    	itinerario1.Add(230, 500);
    	itinerario1.Add(20, 300);
    
    e per aggiungerlo al contenitore:
    
    	ContenitoreItinerari contenitore;
    	contenitore.itinerari.push_back(itinerario1);
    
    Anche qui puoi rendere migliore l' uso della classe ContenitoreItinerari aggiungendoci un metodo 'void Add(Itinerario it)'
Devi accedere o registrarti per scrivere nel forum
76 risposte