PDA

Visualizza versione completa : C++ N° 3 - Namespace, #include e file .h


realtebo
05-05-2004, 12.47.02
Sono arrivato felicemente anche ai namespace. Grazie a Dio qualche nozione di Programmazione-Non-VB l'avevo perchè sennò ci avrei capito poco.

Mi è cmq rimasto qualche dubbio. Vorrei essere certo di aver capito bene... Ditemi se i vari concetti sono corretti e, se vi va, rispondete ad alcune delle domande:

Concetto 1: i namespace sono dei raggrupamenti logici (ma non necessariamente fisici) di variabili e funzioni.

D: questo vuol dire che posso definire variabili e funzioni di uno stesso namespace in 3-4 file diversi?

Concetto 2: ne deduco che le 'librerie' (si chiama così?) che si usano con gli #include siano file .c (giusto?) con delle variabili, strutture e funzioni, ma non necessarimente dello stesso namespace. (corretto?)

A: che differenza ci sta tra, esempio #include <iostream> (direi vitale per quasi tutti i sw) e #include <assert.h> ? formulo meglio: perchè uno ha .h (l'header giusto ? il descrittore di un file .c giusto?) e l'altro no? Come mai alcuni necessitano del .h e altri no?

A proposito dell'ultima dom. sono certo che il libro lo spiegherà, ma sono cmq curioso

grazie per la pazienza

LoryOne
05-05-2004, 20.12.22
I namespace costituiscono il partizionamento dello spazio dei nomi globale creando più regioni di dichiarazioni al fine di evitare i problemi di collisione fra i nomi di funzioni appartenenti a più librerie differenti.

La libreria principale di C++ è la libreria standard definita con namespace std
Quando utilizzi per esempio:

std::getline(std::cin,s)

imponi al compilatore di utilizzare la funzione geline appartenente ( :: ) al namespace std della libreria standard.

realtebo
05-05-2004, 20.38.41
mmhh. si e no. (capito si e no, non era per contraddirti).

Mi hai così confermato il concetto 1. Grrazie

Ho capito che sono delle suddivisioni logiche, ok. Capisco anche il concetto di appartenenza senza problemi.
Capisco anche che se due funzioni si chiamano "disegna" perchè una è del motore 3d, l'altra è del 2d, è comodo fare

engine3d::disegna <> engine2d:disegna

Aspetto le risposte alle A e al concetto 2.
A questo proposito per spiegarmi meglio quoto:


You may remember that we began most of our programs with the statement:

#include <iostream>
The first statement causes the compiler to read in a file called iostream, which contains the definitions of the C++ standard variables. For example, a simplified iostream might look like this:

namespace std {
istream cin; // Define the input stream cin
ostream cout; // Define the output stream cout
ostream cerr; // Define the standard error stream
// Lots of other stuff


IMMAGINO che cin, cout e cerr siano tre 'qualcosa' (funzioni, o classi, boh! ma non è questo il punto) e istream e ostream siano le classi di questi tre cosi. Mi chiedo: sono in tre file diversi o quello qui riportato è solo l'header, il .h che descrive il file .c dove sono implementati !!?

So che sto facendo del casino, ma domandare è il principio della sapienza perchè rileva la propria ignoranza !

P8257 WebMaster
06-05-2004, 01.23.48
La direttiva '#include' del compilatore accetta come parametro un Header che "descriva" quanto si vuole istanziare, gli stream sono implementati come qualsiasi altro componente nel set di base di libreria del compilatore (in visual C++ in file .LIB).

Bye :cool: