Desidero conoscere la differenza esatta tra il file di intestazione (come in MyHeader.hpp) e uno namespace
in c++
?Qual è la differenza tra file di intestazione e spazio dei nomi?
risposta
I file di intestazione sono file effettivi, memorizzati nel file system, a cui fa riferimento il nome del file, e #include
'd in altri file (almeno in C/C++ o altre lingue utilizzando il preprocessore macro M4). In genere i file di intestazione raggruppano parti di codice che sono tutte parti interdipendenti dello stesso articolo specifico. Ad esempio, un gioco potrebbe avere un file di intestazione per tutto il suo rendering grafico.
Gli spazi dei nomi, d'altra parte, sono un elemento del linguaggio di programmazione: non esistono come oggetti file system, ma piuttosto come una designazione all'interno del codice che dice al compilatore che alcune cose si trovano all'interno di tale spazio dei nomi. Gli spazi dei nomi tipicamente raggruppano le interfacce (funzioni, classi/strutture, tipi) di elementi simili (ma non necessariamente interdipendenti). Ad esempio, lo spazio dei nomi std
in C++ contiene tutte le funzioni e le classi della libreria standard.
Un file di intestazione è un file destinato a essere incluso dai file di origine. In genere contengono dichiarazioni di determinate classi e funzioni.
Uno spazio dei nomi consente al codice di classificare gli identificatori. Cioè, classi, funzioni, ecc. Possono essere collocati all'interno di uno spazio dei nomi, mantenendo quelli separati da altre classi che non sono correlate. Ad esempio, in C++ tutto dalla libreria standard è nello spazio dei nomi std
.
Headerfile contiene prototipi, dichiarazioni. –
@Vish: Mi stai dicendo o mi chiede? A rigor di termini, non esiste un prototipo; questa è solo una dichiarazione. – GManNickG
In common langauge, il file di intestazione sarebbe un file univoco sul file system e lo spazio dei nomi coprirà uno o più file.
ad esempio HeaderFile è una cosa fisica e lo spazio dei nomi è una cosa logica.
imparare di più su di loro qui http://en.wikipedia.org/wiki/Namespace e http://en.wikipedia.org/wiki/Header_file
di sapere che cosa è un file di intestazione, è necessario conoscere il significato di "dichiarazione".
Per dirla in parole semplici, in C/C++, la compilazione avviene in modo per-sorgente. Se ho un A.cpp e all'interno uso una funzione foo(), che verrà definita da qualche altra parte, devo dire al compilatore che: "Ehi, sto usando foo(), anche se non puoi vederlo definito ovunque nella mia fonte, non ti preoccupare, è definito in un'altra fonte ". Il modo per dirlo al compilatore è "dichiarare" foo() in A.cpp.
Se io sono l'autore di foo(), tutti che utilizzano foo() ha bisogno di scrivere la dichiarazione void foo(); nel loro file sorgente. Sarà un lavoro molto ripetuto e senza senso. Ed è così difficile per me dire al ragazzo che "usa" pippo() per avere una dichiarazione corretta. Quindi, come autore di foo(), scrivo un file, contenente la dichiarazione per l'uso di foo(), e lo distribuisco in modo che le persone possano semplicemente "importare" il contenuto del file alla loro origine. Il file che sto distribuendo è il file di intestazione. L'azione di importazione è # include in C/C++. Sì, # include solo l'inserimento del contenuto del file incluso nello spot di #include.
Namespace è un'altra storia. Per farla breve, si può pensare di esso è "vero" nome della funzione/classe ecc, per esempio, se faccio
namespace FOO {
class Bar { }
}
la classe non è in realtà chiamato Bar, è "vero" nome è in realtà PIPPO :: Bar.
C++ fornisce un modo per risparmiare digitando il nome lungo vero, da "usare".
Namespace è nuova parola data a headerfile. Per rendere disponibili nuove versioni.
spazio dei nomi è un nuovo concetto di 'ANSI C++' per identificare gli identificatori globali che devono essere frequentemente utilizzate nel programma.
Il file di intestazione è un file sorgente che supporta il programma riutilizzando codice affidabile e testato, risparmiando così tempo e fatica !!!!
La tua risposta contiene alcune informazioni utili e probabilmente sarebbe stata meglio ricevuta se avessi fatto più fatica a scrivere in inglese leggibile e avessi fornito maggiori dettagli. Spero che abbiate una buona esperienza su StackOverflow! – spruceb
Grazie! Ho fatto alcune modifiche. La prossima volta migliorerò su di loro. –
C non ha spazi dei nomi. – GManNickG