appunti3s:namespace
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
appunti3s:namespace [2019/07/27 10:48] – corretto testo tutto in verde e assenza di backlink profpro | appunti3s:namespace [2020/06/08 22:19] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | > tornare all' | ||
+ | |||
+ | |||
+ | ====== namespace ====== | ||
+ | ===== Generalità ===== | ||
+ | In C++, come in C, si può suddividere il codice sorgente in più file, ed inoltre si possono usare i // | ||
+ | * i namespace sono dei contenitori che diminuiscono la visibilità del loro contenuto | ||
+ | * anche le classi sono un altro modo di definire un namespace | ||
+ | * i namespace, rispetto alle classi, non contengono funzioni né dati membri | ||
+ | * i namespace, rispetto alle classi, possono essere estesi anche dopo la loro definizione | ||
+ | ===== Funzioni omonime ===== | ||
+ | In un programma si possono usare due namespace diversi per poter dichiarare due funzioni con lo stesso nome e poterle usare in momenti e contesti diversi. | ||
+ | |||
+ | NOTA: Ogni classe crea automaticamente anche un nuovo namespace | ||
+ | |||
+ | <file cpp 30.h> | ||
+ | namespace MioNameSpace | ||
+ | { | ||
+ | // tutto ciò che voglio... | ||
+ | } | ||
+ | </ | ||
+ | ===== using ===== | ||
+ | Il namespace viene dichiarato dal programmatore che scrive le funzioni dentro un file.h, ma chi lo usa, lo deve utilizzare all' | ||
+ | * la // | ||
+ | * la // | ||
+ | |||
+ | ===== scope resolutor :: ===== | ||
+ | < | ||
+ | Nei file.cpp, questo operatore (introduce l'uso di un qualificatore: | ||
+ | Nei file.cpp, in generale, invece che usare la //direttiva using// è meglio usare lo scope resolutor //%%::%%//. La direttiva si usa quando è noioso ripetere sempre lo scope resolutor. | ||
+ | |||
+ | Oltre a questo, lo scope resolutor può essere usato anche per // | ||
+ | Questo modo di far è molto importante perché permette, durante la stesura del codice, di separare la parte che riguarda l'// | ||
+ | |||
+ | Lo stesso si può ripetere anche per le //funzioni membro// di una classe, poiché anche le classi definiscono automaticamente un loro namespace. | ||
+ | |||
+ | <file cpp 38.h> | ||
+ | // | ||
+ | namespace MioNameSpace | ||
+ | { | ||
+ | void fun(std:: | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | <file cpp 38.cpp> | ||
+ | // | ||
+ | void MioNameSpace:: | ||
+ | { | ||
+ | // codice... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | In quest' | ||
+ | ===== namespace come contenitori di più header ===== | ||
+ | La situzione più comune è definire lo stesso namespace per tutti gli header file che riguardano lo stesso argomento (esempio, di una stessa libreria di funzioni) | ||
+ | ===== namespace annidati ===== | ||
+ | omissis... | ||
+ | ===== namespace anonimi ===== | ||
+ | Se in un file.h, dichiaro un namespace senza specificare nessun nome, viene creato un namespace anonimo esclusivamente per questo file.h. Diversamente dal solito, un namespace anonimo non può essere " | ||
+ | Come si dovrebbe scrivere per fare una cosa paragonabile all' | ||
+ | <file cpp 39.h> | ||
+ | // | ||
+ | namespace | ||
+ | { | ||
+ | void fun(int x); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | <file cpp 38.cpp> | ||
+ | //ERRORE: l' | ||
+ | void ::fun(int x) | ||
+ | { | ||
+ | // codice... | ||
+ | } | ||
+ | </ | ||
+ | Lo potrebbe usare un programmatore che scrive l' | ||
+ | < | ||
+ | { | ||
+ | // codice... | ||
+ | }</ | ||
+ | ===== namespace genitori anonimi ===== | ||
+ | Oltre al namespace anonimo di un singolo file, esiste anche un namespace genitore anonimo. | ||
+ | Dichiarare oggetti all' | ||
+ | |||
+ | Tali elementi sono detti anche " | ||
+ | < | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | > tornare all' | ||
appunti3s/namespace.txt · Last modified: 2020/06/08 22:19 by 127.0.0.1