Composizione

di il
4 risposte

Composizione

Ciao sono un pivello in c++ e sto cercando di capire la composizione. sul mio libro ho trovato questo codice:

// Esempio di composizione

#include <iostream>
#include <string>

using namespace std;

class Data
{
      private:
              unsigned int giorno, mese;
              int anno;
      public:
             Data(int = 25, int = 3, int = 1987);
             ~Data();
             void visualizza() const;     
};

// Non è implementato alcun controllo esteso su giorno, mese e data

Data::Data(int g, int m, int a)
{
               if ((g > 0) && (g < 32)) giorno = g; else giorno = 18; // Giorno a caso
               if ((m > 0) && (m < 13)) mese = m; else mese = 1; // Mese a caso
               if (a < 2011) anno = a; else anno = 1871; // Anno a caso              
}

Data::~Data()
{ }

void Data::visualizza() const
{
     cout << giorno << "." << mese << "." << anno;
}

// Classe dell'avvenimento

class Avvenimento
{
      private:
              string Nome;
              const Data datazione;
      public:
             Avvenimento(string, int, int, int);
             ~Avvenimento();
             void visualizza() const;    
};

Avvenimento::Avvenimento(string titolo, int gg, int mm, int aa) : datazione(gg, mm, aa)
{
    Nome = titolo;                          
}

Avvenimento::~Avvenimento() {  }

void Avvenimento::visualizza() const
{
     cout << "Avvenimento: " << Nome << ". Data: ";
     datazione.visualizza();
     cout << endl;
}

int main()
{
    Avvenimento memorabil("Morte di Pietro Metastasio", 12, 4, 1782);
    
    memorabil.visualizza();
    
    cout << endl << endl;
    
    system("pause");
    
    return 0;
}
non riesco a capire dove e quale funzione si inserisce nell'altra. C'è un anima pia che mi puo far capire come funziona questo programma. Grazie in anticipo

4 Risposte

  • Re: Composizione

    Ot: che razza di libro usa il system("pause")?
  • Re: Composizione

    Il libro in questione è appunti di teoria dei linguaggi formali scritto dal mio prof e stampato da adriatica editrice. Comunque puoi darmi una mano??
  • Re: Composizione

    Chiedi spiegazioni su come si utilizzano le classi? Non riesco a capire la tua domanda.
    All'inizio vedo che viene creata una istanza della classe Avvenimento il cui costruttore accetta 4 parametri. Chiamando poi la funzione visualizza (funzione membro della classe) vengono visualizzati i dati immessi. La classe Avvenimento ha come membro un'istanza della classe Data il cui costruttore accetta 3 interi. Dov'è la tua perplessità?

    N.B.: Di al prof di non usare system("pause"). E' come uccidere una formica con un carro armato.
    un cin.get() farebbe lo stesso effetto.
  • Re: Composizione

    pierin88 ha scritto:


    non riesco a capire dove e quale funzione si inserisce nell'altra.
    Credo tu voglia dire quale classe si inserisce nell' altra (dato che parli di composizione), ti faccio un riassuntino sperando che sia quello che vuoi sapere.

    Nel creare la classe 'Avvenimento' avevi due possibilità, usare l' ereditarietà oppure la composizione.
    Nel primo caso avresti fatto derivare la classe 'Avvenimento' dalla classe 'Data', nella composizione invece la classe 'Avvenimento' contiene un campo di tipo 'Data'.

    Avrebbe funzionato in entrambi i casi. È un problema di come modellare correttamente le classi.

    Scegli l' ereditarietà se fra le classi esiste la relazione è un, ad esempio un 'Cliente' è una 'Persona' quindi fai derivare la classe cliente dalla classe 'Persona'.

    Scegli la composizione se vale la relazione ha un, ad esempio l' 'Automobile' ha un 'Motore' quindi la classe 'Automobile' conterrà un campo 'Motore'.

    A volte la situazione è ambigua, qualcuno potrebbe dire che la macchina è un motore con le ruote, in questi casi ti chiedi se potrebbe averne più di uno (in teoria una macchina potrebbe avere un motore di scorta ) se la risposta è si, non usare la derivazione.
Devi accedere o registrarti per scrivere nel forum
4 risposte