namespaces c
Μια πλήρης επισκόπηση των ονομάτων στο C ++ με απλά παραδείγματα.
Μέχρι στιγμής στα προηγούμενα μαθήματά μας, έχουμε δει τα πάντα σχετικά με μεταβλητές, δηλώσεις, συναρτήσεις και άλλες τέτοιες οντότητες που χρησιμοποιούνται στο C ++.
Κατά την ανάπτυξη εφαρμογών στο C ++ ενδέχεται να προκύψουν ορισμένες ιδιαίτερες καταστάσεις όπως τα ίδια ονόματα μεταβλητών που χρησιμοποιούνται δύο φορές ή οι λειτουργίες που ορίζονται με τα ίδια πρωτότυπα κ.λπ. .
=> Ανατρέξτε στον τέλειο οδηγό εκπαίδευσης C ++ εδώ.
Τι θα μάθετε:
- Τι είναι το Namespace;
- Ορισμός χώρου ονομάτων
- Πρόσβαση στα μέλη του Namespace
- Η οδηγία για τη χρήση
- Ένθετοι Χώροι Ονομάτων
- Εξωτερικοί χώροι ονομάτων
- Συνεχόμενοι χώροι ονομάτων
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Τι είναι το Namespace;
Ας δούμε το παρακάτω Παράδειγμα:
#include #include int main() { int var; double var; std::cin>>var; }
Παραγωγή:
Στη συνάρτηση «int main ()»:
8:10: σφάλμα: διαφωνούμενη δήλωση «double var»
7: 7: σημείωση: προηγούμενη δήλωση ως «int var»
Στο παραπάνω παράδειγμα, έχουμε ορίσει δύο μεταβλητές με διαφορετικούς τύπους αλλά το ίδιο αναγνωριστικό. Έτσι, όταν καταρτίζουμε αυτό το παράδειγμα, λαμβάνουμε ένα σφάλμα όπως φαίνεται στο παράθυρο εξόδου. Αυτές οι αντικρουόμενες δηλώσεις προκύπτουν λόγω του ότι το ίδιο αναγνωριστικό χρησιμοποιείται για να ονομάσει δύο μεταβλητές.
Αυτός ο τύπος καταστάσεων δημιουργεί αμφισημία στις εφαρμογές.
Το C ++ παρουσιάζει κάτι που ονομάζεται « χώροι ονομάτων Για να επιλύσετε αυτό το πρόβλημα. Ο χώρος ονομάτων στο C ++ είναι ακριβώς όπως ένα πακέτο ή μια περιοχή ή μια βιβλιοθήκη που χρησιμοποιείται για τη διάκριση μεταξύ της μεταβλητής ή των λειτουργιών με τα ίδια αναγνωριστικά.
Ένας χώρος ονομάτων μπορεί να περιέχει μεταβλητές, συναρτήσεις, κλάσεις ή άλλα αντικείμενα, ακόμη και έναν άλλο χώρο ονομάτων. Κάθε μέλος του χώρου ονομάτων μπορεί να αναφέρεται χρησιμοποιώντας έναν χώρο ονομάτων. Αυτό βοηθά τον μεταγλωττιστή να κάνει διάκριση μεταξύ διαφόρων οντοτήτων προγραμματισμού ακόμη και αν έχουν τα ίδια ονόματα.
vr ακουστικά για xbox one s
Ορισμός χώρου ονομάτων
Στο C ++, μπορούμε να ορίσουμε ένα χώρο ονομάτων χρησιμοποιώντας τη λέξη-κλειδί ' χώρος ονομάτων ' όπως φαίνεται παρακάτω:
namespace namespace_name{ namespace_declarations; }
Επομένως, εάν χρειαστεί να ορίσουμε ένα χώρο ονομάτων που ονομάζεται 'test_space', μπορούμε να το κάνουμε όπως παρακάτω:
namespace test_space{ int var=10; }
Η παραπάνω δήλωση ορίζει ένα χώρο ονομάτων που ονομάζεται 'test_space'. Όπως φαίνεται, έχει μια ακέραια μεταβλητή var ως μέλος της.
Πρόσβαση στα μέλη του Namespace
Τώρα, έχουμε ορίσει το δικό μας χώρο ονομάτων 'test_space' και πώς έχουμε πρόσβαση στα περιεχόμενα αυτού του χώρου ονομάτων;
Στο πρόγραμμα C ++, μπορούμε να έχουμε πρόσβαση στα μέλη του χώρου ονομάτων χρησιμοποιώντας τη σύνταξη:
namespace_name::namespace_member;
Έτσι, η ακέραια μεταβλητή var που δηλώνεται στο χώρο ονομάτων 'test_space' παραπάνω μπορεί να προσεγγιστεί ως εξής:
test_space::var;
Δείτε το πλήρες παράδειγμα παρακάτω για να δείξετε χώρους ονομάτων και τη χρήση του.
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Παραγωγή:
τοπικό var = 20.53
test_space :: var = 10
Έχουμε δείξει τα πάντα σχετικά με τη δημιουργία και την πρόσβαση στο χώρο ονομάτων στο παραπάνω παράδειγμα προγραμματισμού. Όπως βλέπουμε, το 'test_space' είναι ένας χώρος ονομάτων που έχουμε ορίσει. Έχει μια απλή ακέραια μεταβλητή που ορίζεται σε αυτό. Στη συνέχεια, στην κύρια συνάρτηση, έχουμε μια άλλη διπλή μεταβλητή var που αρχικοποιείται.
Αργότερα προβάλλουμε και τις δύο αυτές μεταβλητές. Σημειώστε ότι ενώ η τοπική διπλή μεταβλητή μέσα στην κύρια μπορεί να εκτυπωθεί απευθείας, για να εκτυπώσετε τη μεταβλητή χώρου ονομάτων, πρέπει να την προηγηθεί με το όνομα χώρου ονομάτων.
Αυτό έχει επίσης φροντίσει για το πρόβλημα των συγκρούσεων μεταξύ των μεταβλητών λόγω των ίδιων ονομάτων που συζητήσαμε νωρίτερα.
Η οδηγία για τη χρήση
Στο προηγούμενο θέμα μας, είδαμε ότι μπορούμε να έχουμε πρόσβαση σε μέλη του χώρου ονομάτων χρησιμοποιώντας namespace_name :: namespace_member.
Εάν δεν θέλουμε να ορίσουμε ένα όνομα χώρου οπουδήποτε στο πρόγραμμα, μπορούμε να χρησιμοποιήσουμε το ' χρησιμοποιώντας Οδηγία για να συμπεριλάβετε το χώρο ονομάτων στο πρόγραμμα.
Αυτό γίνεται ως εξής:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Παραγωγή:
τοπικό var = 20.53
test_space :: var = 10
Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε δύο δηλώσεις μετά τον ορισμό του χώρου ονομάτων 'test_space'.
Αυτά είναι:
using namespace std; using namespace test_space;
Η πρώτη δήλωση χρησιμοποιεί τη δήλωση για πρόσβαση στο χώρο ονομάτων 'std' που είναι ένας προκαθορισμένος τυπικός χώρος ονομάτων στη βιβλιοθήκη C ++. Αυτός ο χώρος ονομάτων χρησιμοποιείται για πρόσβαση σε διάφορες λειτουργίες όπως cin, cout κ.λπ.
Η δεύτερη δήλωση χρησιμοποιείται για να συμπεριλάβει το χώρο ονομάτων 'test_space' στο πρόγραμμα.
Στην κύρια συνάρτηση, μπορούμε να δούμε ότι οι συναρτήσεις όπως το cout και η μεταβλητή var δεν πρέπει να προηγούνται ενός ονόματος χώρου ονομάτων. Μπορούμε να τα αναφέρουμε άμεσα. Όμως, καθώς το var έχει μια σύγκρουση ονόματος με μια τοπική μεταβλητή στην κύρια συνάρτηση, το παραπέμπουμε χρησιμοποιώντας τον τελεστή ανάλυσης εύρους (: :), καθώς οι χώροι ονομάτων έχουν πάντα παγκόσμιο πεδίο.
Ένθετοι Χώροι Ονομάτων
Το C ++ επιτρέπει επίσης την ύπαρξη ένθετων χώρων ονομάτων, δηλαδή έναν χώρο ονομάτων που ορίζεται εντός άλλου χώρου ονομάτων
Η γενική σύνταξη των ένθετων χώρων ονομάτων έχει ως εξής:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Εάν πρέπει να αποκτήσουμε πρόσβαση στο ns2_code, τότε μπορούμε να έχουμε πρόσβαση ως εξής:
ns1::ns2::ns2_code;
Ας δείξουμε τους Nested Namespaces χρησιμοποιώντας τον ακόλουθο κώδικα Παράδειγμα.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; using namespace first::second; int main() { double var = 20.53; cout<<'local var = '< Παραγωγή:
τοπικό var = 20.53
πρώτο :: var = 10
δεύτερο :: var = 20
Έχουμε χρησιμοποιήσει ένθετους χώρους ονομάτων στο παραπάνω πρόγραμμα. Σημειώστε τον τρόπο με τον οποίο χρησιμοποιείται η οδηγία για πρόσβαση σε χώρους ονομάτων. Δεν αρκεί να αναφέρεται μόνο ο εσωτερικός χώρος ονομάτων μία φορά. Εάν χρειαζόμαστε έναν κωδικό από το εξωτερικό χώρο ονομάτων τότε πρέπει να τον παραπέμψουμε ξεχωριστά.
Μπορούμε να χρησιμοποιήσουμε ένα άλλο όνομα για χώρους ονομάτων γνωστό ως 'ψευδώνυμο'. Αυτό είναι ιδιαίτερα χρήσιμο κατά τη χρήση των ένθετων χώρων ονομάτων και ο βαθμός ένθεσης είναι υψηλός.
Μπορούμε να δείξουμε το ψευδώνυμο για ένα χώρο ονομάτων τροποποιώντας το παραπάνω Παράδειγμα.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Παραγωγή:
τοπικό var = 20.53
πρώτο :: var = 10
δεύτερο :: var = 20
Σημειώστε το ψευδώνυμο ένθετο που ορίζεται για το χώρο ονομάτων :: :: second. Μόλις οριστεί ένα ψευδώνυμο, μπορούμε στη συνέχεια να αναφερθούμε στο χώρο ονομάτων χρησιμοποιώντας ένα ψευδώνυμο.
Εξωτερικοί χώροι ονομάτων
Μερικές φορές, όταν έχουμε πάρα πολλούς χώρους ονομάτων για χρήση στην εφαρμογή μας, ίσως θέλουμε να τοποθετήσουμε όλους τους χώρους ονομάτων σε ξεχωριστό αρχείο. Αυτό μπορεί να γίνει εύκολα. Όταν οι χώροι ονομάτων βρίσκονται στο ξεχωριστό αρχείο, απλώς συμπεριλαμβάνουμε αυτό το αρχείο στο πρόγραμμά μας και στη συνέχεια χρησιμοποιήστε απευθείας τους χώρους ονομάτων και τα περιεχόμενά του στο πρόγραμμά μας.
Για παράδειγμα, εάν έχουμε ένα αρχείο με το όνομα ns.h που περιέχει τον ακόλουθο χώρο ονομάτων.
//ns.h namespace first{ int var = 25; }
Τώρα στο πρόγραμμά μας, μπορούμε να χρησιμοποιήσουμε το χώρο ονομάτων «πρώτα» ως εξής:
#include #include “ns.h” using namespace std; int main() { cout<Έτσι, μόλις συμπεριλάβουμε το αρχείο που περιέχει χώρους ονομάτων στο πρόγραμμά μας, μπορούμε να χρησιμοποιήσουμε τους χώρους ονομάτων σαν να έχουν δηλωθεί παγκοσμίως στο ίδιο πρόγραμμα.
Συνεχόμενοι χώροι ονομάτων
Το C ++ μας επιτρέπει επίσης να ορίσουμε κάτι που ονομάζεται συνεχόμενος χώρος ονομάτων. Οι συνεχόμενοι χώροι ονομάτων είναι οι χώροι ονομάτων που ορίζονται περισσότερες από μία φορές έχοντας το ίδιο όνομα. Στην πραγματικότητα, αυτοί δεν είναι ξεχωριστοί χώροι ονομάτων αλλά οι επεκτάσεις του ίδιου χώρου ονομάτων.
Οι συνεχόμενοι χώροι ονομάτων είναι εμφανείς στο παρακάτω Παράδειγμα.
#include #include . namespace first{ int var = 10; } namespace first{ namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Παραγωγή:
τοπικό var = 20.53
πρώτο :: var = 10
δεύτερο :: var = 20
Παρατηρήστε στο παραπάνω παράδειγμα ότι έχουμε ορίσει τον ίδιο χώρο ονομάτων δύο φορές. Στον πρώτο ορισμό, έχουμε μια μεταβλητή που ονομάζεται var. Ενώ στη δεύτερη δήλωση έχουμε ορίσει ένα άλλο χώρο ονομάτων.
Στην κύρια λειτουργία, έχουμε πρόσβαση στα μέλη του εξωτερικού, καθώς και στον εσωτερικό χώρο ονομάτων και σημειώνουμε ότι τα μέλη είναι εύκολα προσβάσιμα.
Αυτό είναι το παράδειγμα των γειτονικών ονομάτων, το οποίο είναι επίσης γνωστό ως «ασυνεχείς χώροι ονομάτων» μερικές φορές. Οι ορισμοί τους εμφανίζονται ξεχωριστοί, αλλά στην πραγματικότητα, είναι συνεχείς χώροι ονομάτων.
συμπέρασμα
Με αυτό, έχουμε φτάσει στο τέλος αυτού του σεμιναρίου για χώρους ονομάτων στο C ++. Namespaces με έναν τρόπο που μας επιτρέπει να διαχωρίσουμε τον κώδικά μας σε διαφορετικούς χώρους ή περιοχές, έτσι ώστε να έχουμε σαφήνεια στην ανάγνωση και επίσης στη χρήση των μελών του.
Στα επόμενα σεμινάριά μας, θα μάθουμε περισσότερα για τα διάφορα βασικά θέματα του C ++ όπως ο χειρισμός εξαιρέσεων, η εισαγωγή / έξοδος αρχείων κ.λπ.
=> Δείτε εδώ για να δείτε τα εκπαιδευτικά σεμινάρια A-Z Of C ++.
Συνιστώμενη ανάγνωση
- Καλύτερη δωρεάν σειρά C # Tutorial: Ο απόλυτος οδηγός C # για αρχάριους
- Φόρτωση δοκιμής με HP LoadRunner Tutorials
- Λειτουργίες βιβλιοθήκης στο C ++
- 70+ ΚΑΛΥΤΕΡΑ C ++ Tutorials για να μάθουν τον προγραμματισμό C ++ ΔΩΡΕΑΝ
- Αντικειμενοστραφής προγραμματισμός στο C ++
- Λίστες Initializer στο C ++
- Επαναληπτές στο STL
- Ενθυλάκωση σε C ++