Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Legare insieme due o più oggetti
Forum - C/C++ - Legare insieme due o più oggetti

Avatar
orsobimbo (Normal User)
Newbie


Messaggi: 8
Iscritto: 27/12/2014

Segnala al moderatore
Postato alle 4:23
Domenica, 28/12/2014
Ciao ,

Senza entrare subito nel dettaglio del codice , avrei questa domanda da porvi per la creazione di una classe

Devo legare in qualche modo un o piu caselle virtuali come se appartenessero ad un puzzle.

Ad esempio: ho inizialmente una sola casella chiamata " cella1 ".
In un secondo momento aggiungo una seconda cella2 assegnandole varie proprietà come per la prima.

Come faccio ad informare la prima cella1 che è stata legata alla seconda cella2?:_doubt:
Ovvero nella classe base cella dovrò creare un metodo esempio "void newcell()" passandogli però un riferimento della cella2 o qualcosa , e non so cosa

Lo scopo è creare un secondo metodo es. "string destra()" in modo che ritorni subito quale cella è stata posizionata a destra  ( in questo caso la la cella2)

Posso passare l'indirizzo dell'oggetto cella2 con il vantaggio di leggerne subito le proprietà o fare altro ?
non so se mi sono spiegato bene , anche vista l'ora:d

Grazie
ciao


Ultima modifica effettuata da orsobimbo il 28/12/2014 alle 4:30
PM Quote
Avatar
SamIAm (Normal User)
Newbie


Messaggi: 16
Iscritto: 09/09/2012

Segnala al moderatore
Postato alle 11:29
Domenica, 28/12/2014
Conosci il meccanismo dell'ereditarietà ?
https://www.google.it/?gws_rd=ssl#q=c%2B%2B+ereditariet%C3%A0

Ultima modifica effettuata da SamIAm il 28/12/2014 alle 11:29
PM Quote
Avatar
orsobimbo (Normal User)
Newbie


Messaggi: 8
Iscritto: 27/12/2014

Segnala al moderatore
Postato alle 11:55
Domenica, 28/12/2014
Ciao Grazie,
Sono all'iniziio ,ma so tramite l'ereditarietà è possibile estendere una classe esistente quindi vuole dire accedere alle proprietà della classe base e aggiungerne altre con la nuova classe, ma probabilmente non l'ho capito bene
fin'ora ho fatto così
Codice sorgente - presumibilmente C#

  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <list>
  4. #include <string>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. class cell {
  10.  
  11.         bool confine;
  12.         string name;
  13.         string nord;
  14.         string est;
  15.         string ovest;
  16.         string sud;
  17.  
  18.        
  19.  
  20.  
  21.         std::list<int> items;
  22.        
  23.  
  24. public:
  25.  
  26.         void addItem( int item);
  27.         void delItem( int item);
  28.         void listItem( int item);
  29.  
  30.         void addEst( cell& obj);
  31.         void addName ( string newname);
  32.         string readName ();
  33.  
  34.  
  35. };
  36.  
  37. void cell::addItem ( int item) {
  38.        
  39.         items.push_front(item);
  40.  
  41. }
  42. void cell::delItem ( int item) {
  43.        
  44.         //
  45.  
  46. }
  47. void cell::addEst( cell& obj) {
  48.  
  49.         cout << obj.readName(); // deve ritornare il nome della cella appena aggiunta
  50.  
  51.  
  52. }
  53.  
  54. void cell::addName( string newname) {
  55.  
  56.         name = newname;
  57.  
  58. }
  59. string cell::readName () {
  60.  
  61.  
  62.         return name;
  63.  
  64. }
  65.  
  66.  
  67.  
  68. void cell::listItem ( int item) {
  69.  
  70.         for(std::list<int>::iterator list_iter = items.begin(); list_iter != items.end(); list_iter++)
  71.         {
  72.                  std::cout<<*list_iter<<endl;
  73.         }
  74.  
  75. }
  76.  
  77.  
  78.  
  79. int _tmain(int argc, _TCHAR* argv[])
  80. {
  81.        
  82.         cell house;
  83.         cell room;
  84.  
  85.         house.addName("Entrata");
  86.         house.addItem(55);
  87.  
  88.        
  89.         room.addName("Cucina");
  90.         house.addEst(room);
  91.  
  92.         cin.get();
  93.        
  94.         return 0;
  95. }



Crea un oggetto house assegnandogli il nome "Entrata", crea un item (55)  all'interno della house ed a Est aggiunge una nuova stanza room
Quando aggiunge la stanza stampa anche il suo nome come prova, ma non memorizza l'indirizzo del nuovo oggetto , cosa che vorrei fare

Il dubbio che ho è che durante il funzionamento del programma non devo creare una nuova classe che eredita (?)
Scusate la confusione,sto sicuramente sbagliando ma non riesco ad applicarne il concetto:_doubt:


Ultima modifica effettuata da orsobimbo il 28/12/2014 alle 11:57
PM Quote
Avatar
orsobimbo (Normal User)
Newbie


Messaggi: 8
Iscritto: 27/12/2014

Segnala al moderatore
Postato alle 12:35
Domenica, 28/12/2014
Sono riuscito a farlo così:

Il mio dubbio e che non sto sfruttando bene la oop , magari ho trovato una soluzione facendo 1000 giri anzichè 1 :_doubt:

Potreste darmi un vostro parere per cortesia?
Non escluso l'eriditarietà ,e solo che non ho ben capito :)))
Codice sorgente - presumibilmente C#

  1. // ConsoleApplication3.cpp : definisce il punto di ingresso dell'applicazione console.
  2. //
  3. #include "stdafx.h"
  4. #include <iostream>
  5. #include <list>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. class cell {
  11.  
  12.         bool confine;
  13.         string name;
  14.         string nord;
  15.         string est;
  16.         string ovest;
  17.         string sud;
  18.  
  19.         int addressEst;
  20.  
  21.         std::list<int> items;
  22. public:
  23.  
  24.         void addItem( int item);
  25.         void delItem( int item);
  26.         void listItem( int item);
  27.  
  28.         void addEst( cell& obj);
  29.         void addName ( string newname);
  30.         string readName ();
  31.         string getNameEst ();
  32. };
  33.  
  34. void cell::addItem ( int item) {
  35.        
  36.         items.push_front(item);
  37.  
  38. }
  39. void cell::delItem ( int item) {
  40.        
  41.         //
  42.  
  43. }
  44. void cell::addEst( cell& obj) {
  45.  
  46.         cout << obj.readName() << " Memorizzato\n" ; // deve ritornare il nome della cella appena aggiunta
  47.         addressEst = (int)&obj;
  48.  
  49. }
  50.  
  51. void cell::addName( string newname) {
  52.  
  53.         name = newname;
  54.  
  55. }
  56. string cell::readName () {
  57.  
  58.  
  59.         return name;
  60.  
  61. }
  62.  
  63. string cell::getNameEst() {
  64.  
  65. cell* pTheObj;
  66. string name;
  67.  
  68. pTheObj = (cell*) addressEst;  // Punto all'indirizzo della stanza che si trova a EST
  69. name = pTheObj->readName();   // leggo il nome della stanza
  70.  
  71. return name;
  72.  
  73. }
  74. void cell::listItem ( int item) {
  75.  
  76.         for(std::list<int>::iterator list_iter = items.begin(); list_iter != items.end(); list_iter++)
  77.         {
  78.                  std::cout<<*list_iter<<endl;
  79.         }
  80.  
  81. }
  82. int _tmain(int argc, _TCHAR* argv[])
  83. {
  84.         cell house;
  85.         cell room;
  86.         string Est;
  87.  
  88.         house.addName("Entrata");  // un nuova casa con la sola entrata
  89.         house.addItem(55);                 // un oggetto dentro la casa
  90.  
  91.        
  92.         room.addName("Cucina");   // Creiamo la stanza cucina
  93.         house.addEst(room);               // Aggiungiamo la nuova stanza cucina a EST della casa
  94.  
  95.        
  96.         // ora come verifica vediamo cosa c'e ad Est
  97.         Est = house.getNameEst();
  98.  
  99.         cout << Est << " Caricato\n" ; // deve ritornare il nome della stanza letta a EST
  100.         cin.get();
  101.        
  102.         return 0;
  103. }


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:57
Domenica, 28/12/2014
Non credo ti serva l'ereditarieta' per questo caso.

Tutte le celle sono uguali tra loro.

Per tenere un riferimento, semplicemente crea dei metodi che connettono le celle tra di loro (cosa che hai gia' fatto).


Il mio blog: https://piero.dev
PM Quote
Avatar
orsobimbo (Normal User)
Newbie


Messaggi: 8
Iscritto: 27/12/2014

Segnala al moderatore
Postato alle 19:04
Lunedì, 29/12/2014
Grazie per il vostro tempo

PM Quote