Newsgroup: it.comp.lang.c++
Titolo: 2 Domande: Sintassi :: e struttura di file e inclusioni

1) L'istanza di una classe permette l'accesso ai metodi mediante la sintassi
        istanza_classe.metodo(...);
oppure in caso di puntatore a istanza
        istanza_classe->metodo(...);
Se tutto questo è vero proseguo dicendo che ogni metodo definito all'esterno
della classe deve essere richiamato con la sintassi
        Classe::metodo(){...}
A questo punto mi chiedo.. cosa si intende quando si utilizzano i doppi due 
punti
per il comando std::cout? So che detto malamente significa esegui quel 
comando
che si trova nella libreria standard .. ma specificamente, perchè si usano i 
due
punti???
2) E' giusto: definire l'interfaccia di una classe in un header file (.h) e 
i suoi metodi
in un file cpp (.cpp)? Mi riferisco ovviamente ad un discorso non di 
correttezza
del codice, quanto di correttezza nella gestione dei file e di 
standardizzazione
all'uso comune.
Inoltre, è giusto inserire nel main l'inclusione del .cpp e del .h o (come 
vedrei
logicamente + corretto) è corretto includere l'header (.h) e *nell'header* 
includere
il cpp ?
Grazie anticipatamente!!! 

 per il comando std::cout ?
quest'altro accesso qualifica un nome dal namespace in cui è 
contenuto.
I :: in sostanza sono qualificatori, chiariscono il percorso 
gerarchico di un dato nome ... un po' come i path per trovare i 
files, anche se il paragone è pacchiano :-)
Con percorsi univoci, avere files (simboli) omonimi, non crea 
più problemi di sovrapposizione ambigua e puoi risolvere in modo 
esplicito eventuali ambiguità tra nomi simili.
Ad es. puoi avere un metodo open su uno "spazio" dedicato ai 
files e uno ai sockets di rete. Senza qualificatore completo 
(files::open() o sockets::open()) il compilatore non saprebbe 
dedurre quale open invocare .... O perlomeno nella misura in cui 
i prototipi delle funzioni non fossero distinguibili dai tipi 
dei parametri. Con i :: puoi disambiguare anche overload con 
parametri tutti uguali senza avere collisione dei nomi.
Non so se sono riuscito a spiegarmi (non so nemmeno se ci ho 
infilato qualche strafalcione, neh).
Ciao
Soviet



Ok *forse* ho capito il senso, cioe' identificare il percorso; ma
perche' allora se mi creo due classi, con due metodi identici; io non
posso utilizzare i due punti ma uso il punto? Cioe' cos'e' realmente
questo namespace std ? Forse e' quel discorso della staticita', cioe'
che i metodi richiamati mediante i :: sono metodi statici in classi
statiche tipo, ovvero accessibili da tutte le altre classi e che
modificano la stessa cosa (memoria  / print a schermo o altro ) ?
Potresti farmi un esempio terra terra scrivendo il codice di due
classi tale per cui quando accedo ai loro metodi dal main devo usare
i :: e non devo inizializzare le classi (che e' quello che mi pare
accada quando uso il cout per esempio.. nessuna inizializzazione e
utilizzo di sti "::")
Grazie!

 il cpp ?
Includi il .h nel main, ma compila il .cpp separatamente.
Poi usa il linker per mettere insieme i due moduli.
  bye
	av.

 utilizzo di sti "::")
No. Usi i :: perche' cout e' in un namespace (std); std non e' una classe.
E non e' vero neanche che non c'e' inizializzazione; std::cout e' gia' 
stato inizializzato quando la tua main viene chiamata.
Ribadisco il consiglio di cui sopra.
  bye
	av.

Ok Grazie a tutti, la tua risposta Andrea è stata molto esauriente..
di sicuro mi mancano delle basi solide, ma devo imparare lo stretto
necessario a svolgere + in fretta possibile il lavoro che mi è stato
assegnato, quindi imparo man mano che si presenta il problema e chiedo
qui se sono in serie difficoltà... so che non è un buon metodo, non
serve che me lo diciate, ma il tempo è tiranno.
Cmq finora gli unici problemi sono relativi a cose non proprio
basilari.. quanto +ttosto avanzate direi ...tipo
il copy constructor
la sintassi :: che si associa alla staticità del metodo
il namespace
DOVE
la 1a e la 3a questione sono cose che in Java non conoscevo (e non so
se ci siano visto che in java di per se è tutto a referenze)
la 2nda è una mera faccenda sintattica...
Quindi mi sembra superfluo leggersi le 1100 pagine del libro che ho a
lavor che peraltro ho visto spiega in maniera tutt'altro che ordinata,
inserendo nel codice (senza necessità alcuna) comandi che verranno
spiegati solo + avanti (dove + avanto è non meglio specificato!)
Insomma .. grazie dell'aiuto, spero di non tediarvi ulteriormente e
chissà che queste nozioni mi bastino.

 spiegati solo + avanti (dove + avanto è non meglio specificato!)
Capisco la tua avversione per questo metodo, ma neanch'io saprei come 
fare altrimenti.
  bye
	av.

Mi viene ora un dubbio: ma all'interno del linguaggio i namespaces sono
mica implementati come classi?
Oppure sono le classi che possono essere viste come dei particolari
namespace?
Sto dicendo fregnacce? :-)

 Sto dicendo fregnacce? :-)
Mi sa di si :-)
  bye
	av.

 (ma se cerchi "scope operator" con Google ne troverai tanti altri).
In effetti questo link da una definizione che non cotempla minimamente
la staticità.