Cardinalità nel codice c++

di il
12 risposte

Cardinalità nel codice c++

Ciao a tutti,

ho riscontrato un problema con la cardinalità.
Se non è prevista riesco a scrivere il codice facilmente, se invece è prevista come in questo caso non so come procedere.
Avendo questo codice in basso dove e come posso inserire la cardinalità che riporto qui in figura(link) ?
http://imagizer.imageshack.us/v2/800x600q90/809/5pm6.jpg

Grazie
#include <cstdlib>
#include <iostream>

using namespace std;

class G{};

class H{
      void associa(G g){gp=&g;};
      private:
              G* gp;
      };

int main(int argc, char *argv[])
{
    return 0;
}

12 Risposte

  • Re: Cardinalità nel codice c++

    Quindi per una relazione con cardinalità 0,1 immagino si risolva ponendo void associa(G* g) {gp=g;} ovvero un oggetto di classe h può possedere almeno un oggetto di classe g.

    Nel caso avessi per lo stesso esempio il caso * si risolverebbe nello stesso modo ovvero ponendo gp=g ?
  • Re: Cardinalità nel codice c++

    Invece il caso solo * puo' essere implementato come il caso 0,1 ovvero g=gp ?
  • Re: Cardinalità nel codice c++

    Compilando ho notato che non andava qualcosa, forse quel G* gp. L'ho corretto in questo modo e ora va G gp.

    E' corretto ?
    
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class G{};
    
    class H{
          void associa(G g){gp=g;};
          private:
                  G gp;
          };
    
    int main(int argc, char *argv[])
    {
        return 0;
    }
    
  • Re: Cardinalità nel codice c++

    Ma non era

    void associa(G* g) {gp=g;}

    ?
  • Re: Cardinalità nel codice c++

    Hm no, ti faccio vedere il testo dell'esercizio:

    http://imagizer.imageshack.us/v2/800x600q90/585/5t03.jpg

    dove per figura1 si intende il link che ho precedentemente inviato.
  • Re: Cardinalità nel codice c++

    Va bene. Allora forse dovevo fare anche quella correzione così da avere due puntatori.
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class G{};
    
    class H{
          void associa(G* g){gp=g;};
          private:
                  G* gp;
          };
    
    int main(int argc, char *argv[])
    {
        return 0;
    }
  • Re: Cardinalità nel codice c++

    Stesso problema

    http://www.hwupgrade.it/forum/showthread.php?t=262447

    o sei sempre tu?
  • Re: Cardinalità nel codice c++

    Mentre supponendo per lo stesso esempio il caso * invece che 0..1 potrebbe andar bene il seguente codice ?
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class G{};
    
    class H{
          void associa(G* g){gp=g;};
          private:
                  G *gp[5];
          };
    
    int main(int argc, char *argv[])
    {
        return 0;
    }
    
  • Re: Cardinalità nel codice c++

    È il collega qui con me

    oregon ha scritto:


    Stesso problema

    http://www.hwupgrade.it/forum/showthread.php?t=262447

    o sei sempre tu?
  • Re: Cardinalità nel codice c++

    Benone, quindi in definitiva potrei ad esempio scrivere in questo modo:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class G{};
    
    class H{
          void associa(G* g){gp[3]=g;};
          private:
                  G *gp[5];
          };
    
    int main(int argc, char *argv[])
    {
        return 0;
    }
    Non capisco però come mai avendo dichiarato un'array di 5 elementi, se casualmente scrivo un numero maggiore di 6 in void associa(G* g){gp[3]=g;}; il compilatore non mi da problemi. Qualche risposta teorica ?
  • Re: Cardinalità nel codice c++

    Non capisco però come mai avendo dichiarato un'array di 5 elementi, se casualmente scrivo un numero maggiore di 6 in void associa(G* g){gp[3]=g;}; il compilatore non mi da problemi. Qualche risposta teorica ?
    Semplicemente in C/C++ il compilatore non effettua alcun controllo sui limiti degli array
  • Re: Cardinalità nel codice c++

    Grazie a tutti per il grande aiuto che mi avete dato oggi tra pratica e teoria
Devi accedere o registrarti per scrivere nel forum
12 risposte