Oppure

Loading
28/12/14 3:23
orsobimbo
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 28/12/14 3:30
aaa
28/12/14 10:29
SamIAm
Conosci il meccanismo dell'ereditarietà ?
google.it/
Ultima modifica effettuata da SamIAm 28/12/14 10:29
aaa
28/12/14 10:55
orsobimbo
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ì
#include "stdafx.h"
#include <iostream>
#include <list>
#include <string>


using namespace std;

class cell {

	bool confine;
	string name;
	string nord;
	string est;
	string ovest;
	string sud;

	


	std::list<int> items;
	

public:

	void addItem( int item);
	void delItem( int item);
	void listItem( int item);

	void addEst( cell& obj);
	void addName ( string newname);
	string readName ();


};

void cell::addItem ( int item) {
	
	items.push_front(item); 

}
void cell::delItem ( int item) {
	
	//

}
void cell::addEst( cell& obj) {

	cout << obj.readName(); // deve ritornare il nome della cella appena aggiunta


}

void cell::addName( string newname) {

	name = newname;

}
string cell::readName () {


	return name;

}



void cell::listItem ( int item) {

	for(std::list<int>::iterator list_iter = items.begin(); list_iter != items.end(); list_iter++)
	{
		 std::cout<<*list_iter<<endl;
	}

}



int _tmain(int argc, _TCHAR* argv[])
{
	
	cell house;
	cell room;

	house.addName("Entrata");
	house.addItem(55);

	
	room.addName("Cucina");
	house.addEst(room);

	cin.get();
	
	return 0;
}


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 28/12/14 10:57
aaa
28/12/14 11:35
orsobimbo
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 :)))
// ConsoleApplication3.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include <iostream>
#include <list>
#include <string>

using namespace std;

class cell {

	bool confine;
	string name;
	string nord;
	string est;
	string ovest;
	string sud;

	int addressEst;

	std::list<int> items;
public:

	void addItem( int item);
	void delItem( int item);
	void listItem( int item);

	void addEst( cell& obj);
	void addName ( string newname);
	string readName ();
	string getNameEst ();
};

void cell::addItem ( int item) {
	
	items.push_front(item); 

}
void cell::delItem ( int item) {
	
	//

}
void cell::addEst( cell& obj) {

	cout << obj.readName() << " Memorizzato\n" ; // deve ritornare il nome della cella appena aggiunta
	addressEst = (int)&obj;

}

void cell::addName( string newname) {

	name = newname;

}
string cell::readName () {


	return name;

}

string cell::getNameEst() {

cell* pTheObj;
string name;

pTheObj = (cell*) addressEst;  // Punto all'indirizzo della stanza che si trova a EST
name = pTheObj->readName();   // leggo il nome della stanza

return name;

}
void cell::listItem ( int item) {

	for(std::list<int>::iterator list_iter = items.begin(); list_iter != items.end(); list_iter++)
	{
		 std::cout<<*list_iter<<endl;
	}

}
int _tmain(int argc, _TCHAR* argv[])
{
	cell house;
	cell room;
	string Est;

	house.addName("Entrata");  // un nuova casa con la sola entrata
	house.addItem(55);		   // un oggetto dentro la casa

	
	room.addName("Cucina");   // Creiamo la stanza cucina 
	house.addEst(room);		  // Aggiungiamo la nuova stanza cucina a EST della casa

	
	// ora come verifica vediamo cosa c'e ad Est
	Est = house.getNameEst();

	cout << Est << " Caricato\n" ; // deve ritornare il nome della stanza letta a EST
	cin.get();
	
	return 0;
}
aaa
28/12/14 15:57
pierotofy
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: piero.dev
29/12/14 18:04
orsobimbo
Grazie per il vostro tempo
aaa