Newsgroup: it.comp.lang.c++
Titolo: aiuto per classi e metodi

Sto sviluppando un progetto per MIPS, usando per ora il Visual C++ 6.0 come
ide per lo sviluppo (per ora non ho ancora bisogno di testare, devo solo
scrivere codice).
Il mio problema è la definizione degli attributi per classi e metodi. In
pratica mi sono accorto che i miei due file ClassType.h e ClassMethod.h (che
contengono rispettivamente la definizione delle classi e la definizione dei
metodi) permettono che ogni classe condivida i metodi delle altre, pur non
avendo effettuato nessuna ereditarietà. Sono arcisicuro di aver sbagliato io
qualcosa, ma da bravo inesperto non mi accorgo di cosa...
Se ho le seguenti classi
Class Block {
public:
    metodo 1
    metodo 2
    metodo 3
    metodo 4
private:
    var 1
    var 1

 wrote in message
86fcls$21h$1...@nslave2.tin.it...

       var 3
}
Class ListBlock {
public:
    metodo 1
    metodo 2
    metodo 3
private:
    var a
    var b
    var c
}
I metodi, essendo stati dichiarati public possono essere visti da qualunque
altra classe, giusto?
Le variabili e gli eventuali metodi dichiarati privati sono visibili solo
all'interno della classe che li contiene, giusto?
Ora, ciò di cui non sono sicuro è come fare in modo che il metodo
Block::metodo1 possa accedere alla variabile b (per esempio). Non credo sia
possibile farlo, quindi mi rimane solo la possiblità di scrivere dei metodi
pubblici che ritornino un puntatore a questa variabile?
grazie per l'aiuto
Bruno

 Block::metodo1 possa accedere alla variabile b (per esempio). Non credo
sia
Se il metodo e la variabile appartengono alla stessa classe (non e`
chiaro perche` continui a cambiare nomi da Block a ListBlock ecc),
l'accessibilita` e` garantita.  Se no, l'accessibilita` selettiva si puo`
ottenere tramite l'uso di friend, e, eventualmente, di classi annidate
(non e` detto che una granularita` cosi` fine sia una buona idea,
ma, se e` quel che si vuole, le classi annidate sono il modo in C++
di esprimerla).
Alex

 > Ora, ciò di cui non sono sicuro è come fare in modo che il metodo


 variabili private di un'altra se non dichiarandole friend o annidandole.
L'annidamento serve solo per essere *selettivi* sull'accessibilita`; di per
se, non la implica (va quindi usato ASSIEME a friend e altri schemi di
controllo di accessibilita`).
Alex

>controllo di accessibilita`).
Ma le nested classes servono davvero solo per "seletittivizzare" /
(brutto neologismo :)..prendilo pure come.."aumentare di granularita'" ) 
l'interfaccia di una classe che debba necessariamente avere molti metodi 
pubblici, ad esempio, o c'e qualche altra applicazione che ancora non ho 
scoperto...
class Sempaphore
{
	public:
	class RedLight: public light { ... } ;
	class YellowLight: public light {... } ;
	class GreenLight: public light {... };
}
Questo e' un semaforo "cablato" con delle nested class, adesso provo a 
farne una versione "normale": (speriamo non venga fuori troppo male)
class Semaphore
{
	protected:
	std::vector<Light*>;
	public:
	enum LightsTypes	{ Light_GREEN = 0,
				  Light_YELLOW,
				  Light_RED
	};
	virtual Light& GetLight(LightTypes lt);
}
Semaphore.GetLight(Semaphore::LIGHT_GREEN);
Sembra che tutti i meriti vadano alla prima, che e' anche molto piu' 
facilmente estensibibile....mi sto perdendo qualcosa?
-- 
God@Universe#~>shutdown -r,
  . 
darX...@tin.it
      . 
star...@wappi.com
 (GSM SMS)
   . Fido 2:335/241.5     . 
http://darxstar.cjb.net
    . ICQ UIN# 11151997    . Britannia: UO-T2A,Trisinc, Gwydion the Mage
---
 " I don't want to die,
 I sometimes wish I'd never been born at all "
                                    -- the Queen

 scoperto...
Ce ne sono altre, ma sono marginali (a mio parere).
Ad esempio, evitare l'eredita` privata (che alcuni detestano, ed
effettivamente non e` che sia entusiasmante) pur avendo bisogno
di override: basta fare eredita` _pubblica_... in una nested class
_privata_.
La comodita` puo` diventare notevole nel caso di template.
Alex