C ++ Namespace

C Namespace



Ένας χώρος ονομάτων στο C ++ είναι ένα γενικευμένο πεδίο. Η δήλωσή του ξεκινά με τη δεσμευμένη λέξη, χώρος ονομάτων, που ακολουθείται από ένα όνομα της επιλογής του προγραμματιστή και, στη συνέχεια, το μπλοκ στα στηρίγματα. Το μπλοκ περιέχει βασικές δηλώσεις ή/και ορισμούς αντικειμένων, συναρτήσεων και άλλων οντοτήτων C ++.

Εξετάστε τις ακόλουθες δύο κλιμακωτές δηλώσεις σε παγκόσμιο πεδίο, στο ακόλουθο πρόγραμμα:







#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

intvarId= 5?
φλοτέρvarId= 2.3?

intκύριος()
{

ΕΠΙΣΤΡΟΦΗ 0?
}

Μια προσπάθεια μεταγλώττισης αυτού του προγράμματος οδηγεί σε σφάλμα μεταγλώττισης. Υπάρχουν δύο μεταβλητές με το ίδιο όνομα, varId Το Αν και είναι δύο διαφορετικές μεταβλητές δύο διαφορετικών τύπων, int και φλοτέρ , ο μεταγλωττιστής απορρίπτει τις δύο δηλώσεις επειδή είναι το ίδιο όνομα. Το ακόλουθο πρόγραμμα επιλύει αυτό το πρόβλημα δηλώνοντας τις μεταβλητές με το ίδιο όνομα σε δύο διαφορετικά γενικευμένα πεδία:



#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

ονομαστικος χωρος NA
{
intvarId= 5?
}

χώρος ονομάτων NB
{
φλοτέρvarId= 2.3?
}

intκύριος()
{
κόστος<<ΝΑ::varId << ' n'?
κόστος<<ΣΗΜΕΙΩΣΗ::varId << ' n'?

ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος έχει ως εξής:



5
2.3

Υπάρχουν δύο χώροι ονομάτων στο παραπάνω πρόγραμμα: ΝΑ , που έχει τον ορισμό ενός ακέραιου, και ΣΗΜΕΙΩΣΗ , που έχει τον ορισμό του float αλλά με το ίδιο όνομα με τον ακέραιο για το NA. Τέλος, όταν εκτελέστηκε το πρόγραμμα, χρησιμοποιήθηκε το ίδιο όνομα για δύο διαφορετικές μεταβλητές. Σημειώστε ότι για να αποκτήσετε πρόσβαση στο ίδιο όνομα δύο διαφορετικών μεταβλητών, πρέπει να χρησιμοποιήσετε το συγκεκριμένο όνομα για τον χώρο ονομάτων, ακολουθούμενο από το κοινό αναγνωριστικό. Το όνομα του χώρου ονομάτων και το κοινό αναγνωριστικό διαχωρίζονται από τον τελεστή ανάλυσης πεδίου, :: Το Το όνομα των χώρων ονομάτων θα διαφοροποιήσει τα αντικείμενα.





Αυτό το άρθρο καλύπτει τη βασική έννοια ενός χώρου ονομάτων και τη χρήση του στη γλώσσα προγραμματισμού C ++. Για να ακολουθήσετε αυτό το άρθρο, θα πρέπει να έχετε βασική γνώση της γλώσσας C ++. Θα πρέπει επίσης να έχετε γνώση του πεδίου C ++, αν και εξηγείται συνοπτικά σε αυτό το άρθρο. Για να μάθετε περισσότερα σχετικά με το πεδίο C ++, αναζητήστε τη φράση, Πεδίο εφαρμογής σε C ++ (χωρίς εισαγωγικά) στο πλαίσιο αναζήτησης οποιασδήποτε ιστοσελίδας linuxhint.com και πατήστε Enter. Αυτό θα σας οδηγήσει στο άρθρο που έγραψε αυτός ο συγγραφέας.

Περιεχόμενο άρθρου

Τι είναι το Namespace;

Μια δηλωτική περιοχή είναι το μεγαλύτερο μέρος ενός προγράμματος στο οποίο ισχύει το όνομα μιας οντότητας (μεταβλητής). Αυτή η περιοχή ονομάζεται πεδίο εφαρμογής. Ο χώρος ονομάτων στο C ++ είναι ένα γενικευμένο πεδίο του οποίου ο κύριος σκοπός είναι η επίλυση διενέξεων ονομάτων. Ένας χώρος ονομάτων έχει βασικές δηλώσεις ή/και ορισμούς οντοτήτων.



Ο παγκόσμιος χώρος ονομάτων και το πρόβλημά του

Ο παγκόσμιος χώρος ονομάτων είναι το παγκόσμιο πεδίο εφαρμογής. Εξετάστε το ακόλουθο σύντομο πρόγραμμα:

#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

intταυτότητα= 55?
φλοτέρταυτότητα= 12.17?

intκύριος()
{

ΕΠΙΣΤΡΟΦΗ 0?
}

Στο παραπάνω πρόγραμμα, υπάρχουν δύο μεταβλητές, και οι δύο ονομάζονται ταυτότητα Το Αυτές οι μεταβλητές βρίσκονται στο παγκόσμιο πεδίο. δηλαδή βρίσκονται στον παγκόσμιο χώρο ονομάτων. Μια προσπάθεια μεταγλώττισης αυτού του προγράμματος θα αποτύχει με ένα μήνυμα σφάλματος. Το παγκόσμιο εύρος δεν δέχεται περισσότερες από μία μεταβλητές με το ίδιο όνομα, επομένως υπάρχει ανάγκη για έναν προσαρμοσμένο χώρο ονομάτων.

Προσαρμοσμένος χώρος ονομάτων

Ένας χώρος ονομάτων δεν έχει μόνο ένα όνομα. Αντ 'αυτού, ένας χώρος ονομάτων έχει ένα σύνολο ονομάτων για την αποφυγή σύγκρουσης με άλλα σύνολα ονομάτων. Για να αποφύγετε τη σύγκρουση χαμηλότερα στον κώδικα, προηγηθείτε κάθε ονόματος με το όνομα του χώρου ονομάτων και :: Το Το παρακάτω πρόγραμμα το απεικονίζει χρησιμοποιώντας δύο προσαρμοσμένους χώρους ονομάτων:

#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

ονομαστικος χωρος NA
{
intvarInt= 6?
φλοτέρflt?
}

χώρος ονομάτων NB
{
intvarInt= 7?
φλοτέρflt?
}

intκύριος()
{
κόστος<<ΝΑ::varInt << ' n'?
κόστος<<ΣΗΜΕΙΩΣΗ::varInt << ' n'?
ΝΑ::flt = 2.5?
ΣΗΜΕΙΩΣΗ::flt = 4.8?
κόστος<<ΝΑ::flt << ' n'?
κόστος<<ΣΗΜΕΙΩΣΗ::flt << ' n'?

ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος είναι:

6
7
2.5
4.8

Σημειώστε ότι τα ονόματα NA :: flt και ΣΗΜ .: flt έχουν ορισθεί τελικά στο κύριος() λειτουργία. Το C ++ δεν επιτρέπει έναν τέτοιο ορισμό στο παγκόσμιο πεδίο εφαρμογής.

Λάβετε υπόψη ότι ο προσαρμοσμένος χώρος ονομάτων είναι ένθετος χώρος ονομάτων για τον καθολικό χώρο ονομάτων.

Οδηγία για τη χρήση

Για να αποφύγετε την πληκτρολόγηση ονόματος χώρου :: όνομα συνεχώς και όχι μόνο όνομα μετά τη δήλωση του χώρου ονομάτων, μπορείτε να χρησιμοποιήσετε το χρησιμοποιώντας διευθυντικός. Η σύνταξη για χρήση του χρησιμοποιώντας η οδηγία έχει ως εξής:

χρήση ονομάτων Χώρος ονομάτων?

ο χρησιμοποιώντας η οδηγία δεν είναι οδηγία προεπεξεργαστή, οπότε τελειώνει με ερωτηματικό (;).

Το παρακάτω πρόγραμμα απεικονίζει τη χρήση του χρησιμοποιώντας οδηγία και άλλα:

#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

χώρος ονομάτων NB
{
intvarInt= 7?
intλειτουργία()
{
ΕΠΙΣΤΡΟΦΗvarInt?
}
}

intfn()
{
χρησιμοποιώντας το χώρο ονομάτων NB?
intmyVar2=λειτουργία()?
// ακολουθούν άλλα αντικείμενα και συναρτήσεις από το NB.
ΕΠΙΣΤΡΟΦΗmyVar2?
}

intmyVar3=ΣΗΜΕΙΩΣΗ::λειτουργία()?

intκύριος()
{
κόστος<<fn() << '' <<myVar3<< ' n'?

ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος αυτού του προγράμματος είναι 7 7 Το Ο όρος Χρήση χώρου ονομάτων NB. έχει τοποθετηθεί στην αρχή του fn () ορισμός. ο func () από το χώρο ονομάτων NB καλείται ακριβώς κάτω από αυτό, χωρίς προηγούμενο ΣΗΜΕΙΩΣΗ :: Το

Μια μεταβλητή που δηλώνεται στο παγκόσμιο πεδίο (παγκόσμιος χώρος ονομάτων) εμφανίζεται από το σημείο της δήλωσης έως το τέλος του αρχείου. Φαίνεται επίσης στους ένθετους χώρους ονομάτων (ένθετα πεδία), όπως οι ένθετοι fn () πεδίο λειτουργίας παραπάνω. ο χρησιμοποιώντας η οδηγία ενώνει τον χώρο ονομάτων της από τη θέση στην οποία βρίσκεται έως το τέλος του πεδίου στο οποίο τοποθετείται.

Το όνομα func () από το χώρο ονομάτων NB δεν φαίνεται κάτω από το fn () ορισμός επειδή Χρήση χώρου ονομάτων NB. τοποθετήθηκε εντός του πεδίου λειτουργίας (μπλοκ). Υπό αυτήν την προϋπόθεση, για χρήση func () εκτός του μπλοκ χώρου ονομάτων NB (πεδίο εφαρμογής), πρέπει να προηγείται ΣΗΜΕΙΩΣΗ :: , όπως στην ακόλουθη δήλωση:

intmyVar3=ΣΗΜΕΙΩΣΗ::λειτουργία()?

ο χρησιμοποιώντας η οδηγία ενώνει τον χώρο ονομάτων του με τον εξωτερικό χώρο ονομάτων φωλιάσματος από τη θέση στην οποία τοποθετείται μέχρι το τέλος του εξωτερικού χώρου ονομάτων φωλιάσματος. Στο ακόλουθο πρόγραμμα, ο χώρος ονομάτων NA ενώνεται με τον καθολικό χώρο ονομάτων. Και οι δύο χώροι ονομάτων εκτείνονται στη συνέχεια στο fn () ορισμός συνάρτησης ονομάτων χώρου, στον οποίο συνδέονται με τον χώρο ονομάτων NB. Ο χώρος ονομάτων NB τελειώνει στο τέλος του fn () ορισμός συνάρτησης και οι δύο προηγούμενοι χώροι ονομάτων συνεχίζονται μέχρι το τέλος του αρχείου (διαβάστε τον κώδικα).

#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

ονομαστικος χωρος NA
{
intvarInt= 6?
intλειτουργία()
{
ΕΠΙΣΤΡΟΦΗvarInt?
}

}

χώρος ονομάτων NB
{
intvarInt= 7?
intλειτουργία()
{
ΕΠΙΣΤΡΟΦΗvarInt?
}
}

χρησιμοποιώντας NA χώρο χώρου?
intmyVar0=varInt?
// ακολουθούν άλλα αντικείμενα και συναρτήσεις από :: και NB.

intfn()
{
intmyVar1=varInt?
χρησιμοποιώντας το χώρο ονομάτων NB?
intmyVar2=ΣΗΜΕΙΩΣΗ::λειτουργία()?
// ακολουθούν άλλα αντικείμενα και συναρτήσεις από το NB, μέχρι το τέλος αυτού του πεδίου.
ΕΠΙΣΤΡΟΦΗmyVar1+myVar2?
}

// Ακολουθούν μόνο αντικείμενα και συναρτήσεις από :: και NB.

intmyVar3=ΣΗΜΕΙΩΣΗ::λειτουργία()?

intκύριος()
{
κόστος<<myVar0<< '' <<fn() << '' <<myVar3<< ' n'?

ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος είναι 6, 13, 7 Το

Σημείωση: Ο γενικός χώρος ονομάτων υποδεικνύεται με :: , που σημαίνει ότι δεν υπάρχει τίποτα πριν από τον τελεστή ανάλυσης πεδίου που ακολουθεί.

Κάτω από τη δήλωση, το χρήση NA χώρου ονομάτων. μεταβλητές από τον καθολικό και τον NA χώρο μπορούν να χρησιμοποιηθούν χωρίς ένδειξη του χώρου ονομάτων προέλευσης. Η επόμενη πρόταση χρησιμοποιεί το varInt του ονοματολογίου NA. Η παγκόσμια και η συνδυασμένη περιοχή ονομάτων χώρου NA εκτείνεται σε fn () χώρος ονομάτων συναρτήσεων. Ετσι το varInt της πρώτης δήλωσης στο fn () πεδίο λειτουργίας, είναι του χώρου ονομάτων NA.

Δεδομένου ότι η περιοχή για τους παγκόσμιους και NA χώρους ονομάτων εκτείνεται σε όλο το fn () πεδίο εφαρμογής, μετά την int myVar2 = NB :: func (); , οποιοδήποτε όνομα από τον χώρο ονομάτων NB μπορεί να χρησιμοποιηθεί μόνο στο fn () πεδίο εφαρμογής χωρίς προηγούμενο ΣΗΜΕΙΩΣΗ :: , μόνο αν δεν εμφανίστηκε σε NA και καθολικούς χώρους ονομάτων (μπλοκ). Διαφορετικά, θα πρέπει να προηγείται ΣΗΜΕΙΩΣΗ :: Το Η περιοχή των συνδυασμένων χώρων ονομάτων για NA και παγκόσμια συνεχίζεται κάτω από το fn () ορισμό και στο κύριος() λειτουργία μέχρι το τέλος του αρχείου.

Η επέκταση του χώρου ονομάτων NB ξεκινά από int myVar2 = NB :: func (); στο fn () μπλοκ και τελειώνει στο τέλος του fn () μπλοκ ορισμού.

Σημείωση: Τα ονόματα των οποίων οι περιοχές είναι ενωμένες δεν πρέπει να έχουν το ίδιο όνομα μεταβλητής στα διαφορετικά μπλοκ ονομάτων τους, καθώς αυτό θα εξακολουθούσε να προκαλεί σύγκρουση.

Περιφέρειες ονομάτων

Ένας χώρος ονομάτων είναι ένα πεδίο εφαρμογής. Εκτός από τον παγκόσμιο χώρο ονομάτων (παγκόσμιο εύρος), οποιοσδήποτε χώρος ονομάτων πρέπει να δηλώνεται σε ένα μπλοκ. Αυτό το μπλοκ είναι το πρώτο μέρος των πιθανώς κατανεμημένων περιοχών του χώρου ονομάτων. Με την οδηγία χρήσης, ο χώρος ονομάτων μπορεί να επεκταθεί ως περιοχές σε άλλα πεδία.

Οι οντότητες που δηλώνονται σε ένα σώμα χώρου ονομάτων λέγεται ότι είναι μέλη του χώρου ονομάτων και τα ονόματα που εισάγονται από αυτές τις δηλώσεις στην περιοχή δήλωσης του χώρου ονομάτων λέγονται ότι είναι ονόματα μελών του χώρου ονομάτων.

Ενσωματωμένοι χώροι ονομάτων

Το ακόλουθο πρόγραμμα εμφανίζει ένθετους χώρους ονομάτων:

#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

ονομαστικος χωρος Α
{
intΕγώ= 1?
χώρος ονομάτων Β
{
intΕγώ= 2?
χώρος ονομάτων Γ
{
intΕγώ= 3?
}
}
}

intκύριος()
{
κόστος<<ΠΡΟΣ ΤΟ::Εγώ << '' <<ΠΡΟΣ ΤΟ::σι::Εγώ << '' <<ΠΡΟΣ ΤΟ::σι::ντο::Εγώ << ' n'?

ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος είναι:

1 2 3

Παρατηρήστε ότι οι τρεις τιμές έχουν προσπελαστεί χρησιμοποιώντας τον τελεστή ανάλυσης πεδίου.

Τυπικός χώρος ονομάτων

Το C ++ διαθέτει μια βιβλιοθήκη που ονομάζεται τυπική βιβλιοθήκη. Τα ονόματα αντικειμένων, συναρτήσεων και άλλων οντοτήτων σε αυτήν τη βιβλιοθήκη προέρχονται από ένα χώρο ονομάτων που ονομάζεται τυπικός χώρος ονομάτων, γραμμένος ως ώρες Το Η τυπική βιβλιοθήκη περιέχει υπο-βιβλιοθήκες και μία από αυτές είναι iostream Το ο iostream η βιβλιοθήκη περιέχει το αντικείμενο κόστος , το οποίο χρησιμοποιείται για την αποστολή αποτελεσμάτων στην κονσόλα (τερματικό).

Το όνομα κόστος πρέπει να είναι στο ώρες ονομαστικου χωρου. Χρησιμοποιώ iostream με τα ώρες namespace, το πρόγραμμα πρέπει να έχει ως εξής:

#περιλαμβάνω
χρησιμοποιώντας το όνομα χώρου std?

Σημειώστε τη χρήση του χρησιμοποιώντας οδηγία και ώρες Το Ο όρος #περιλαμβάνω είναι μια προ -επεξεργαστική οδηγία και δεν τελειώνει με ερωτηματικό. Περιλαμβάνει το αρχείο iostream στη θέση της οδηγίας του.

συμπέρασμα

Ένας χώρος ονομάτων είναι ένα πεδίο εφαρμογής. Η περιγραφή του χώρου ονομάτων (ορισμός) περιέχει βασικές δηλώσεις ή/και ορισμούς αντικειμένων, συναρτήσεων και άλλων οντοτήτων C ++. Εκτός από τον ορισμό του χώρου ονομάτων, μπορείτε να έχετε πρόσβαση στο όνομα με τη σύνταξη, namespaceName :: name Το Εκτός από τον παγκόσμιο χώρο ονομάτων (παγκόσμιο εύρος), οποιοσδήποτε χώρος ονομάτων πρέπει να δηλώνεται σε ένα μπλοκ. Αυτό το μπλοκ είναι το πρώτο μέρος των πιθανώς κατανεμημένων περιοχών του χώρου ονομάτων. Με την χρησιμοποιώντας οδηγία, ο χώρος ονομάτων μπορεί να επεκταθεί ως περιοχές σε άλλα πεδία. Τα ονόματα των οποίων οι περιοχές είναι ενωμένες δεν πρέπει να έχουν το ίδιο όνομα μεταβλητής στα διαφορετικά μπλοκ χώρου ονομάτων τους, καθώς αυτό θα εξακολουθούσε να προκαλεί σύγκρουση ονομάτων.

Chrys