Πεδίο εφαρμογής σε C ++

Scope C



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

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

Δήλωση και Πεδίο εφαρμογής

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







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

κενόςfn()
{
intόπου= 3?
αν (1==1)
{
κόστος<<όπου<<' n'?
}
}

intκύριος()
{
fn()?
ΕΠΙΣΤΡΟΦΗ 0?
}

Η συνάρτηση fn () έχει δύο μπλοκ: ένα εσωτερικό μπλοκ για την κατάσταση if και ένα εξωτερικό μπλοκ για το σώμα της λειτουργίας. Το αναγνωριστικό, var, εισάγεται και φαίνεται στο εξωτερικό μπλοκ. Φαίνεται επίσης στο εσωτερικό μπλοκ, με τη δήλωση cout. Το εξωτερικό και το εσωτερικό μπλοκ είναι και τα δύο πεδία για το όνομα, var.



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



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

κενόςfn()
{
intόπου= 3?
αν (1==1)
{
φλοτέρόπου= 7.5?
κόστος<<όπου<<' n'?
}
}

intκύριος()
{
fn()?
ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος είναι 7,5. Σε αυτήν την περίπτωση, το όνομα, var, δεν μπορεί πλέον να χρησιμοποιηθεί στο εσωτερικό μπλοκ για να αναφέρεται στον ακέραιο αριθμό 3, ο οποίος εισήχθη (δηλώθηκε) στο εξωτερικό μπλοκ. Τέτοια εσωτερικά μπλοκ αναφέρονται ως πιθανά πεδία για οντότητες που δηλώνονται στο εξωτερικό μπλοκ.





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

Μια δήλωση με το ίδιο όνομα σε ένα εσωτερικό μπλοκ συνήθως παρακάμπτει τη δήλωση του ίδιου ονόματος έξω από αυτό το εσωτερικό μπλοκ. Τα εσωτερικά μπλοκ μπορούν να τοποθετήσουν άλλα εσωτερικά μπλοκ.



Παγκόσμιο πεδίο εφαρμογής

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

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

φλοτέρόπου= 9,4?

intκύριος()
{
κόστος <<όπου<<' n'?
κόστος <<::όπου<<' n'?

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

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

Σε αυτή την περίπτωση, η δηλωτική περιοχή ή το πεδίο για το var ξεκινά από το σημείο δήλωσης για το var, συνεχίζει προς τα κάτω μέχρι το τέλος του αρχείου (μονάδα μετάφρασης).

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

Σημείωση: Η οντότητα, main (), δηλώνεται επίσης σε παγκόσμιο εύρος.

Αποκλεισμός πεδίου εφαρμογής

Η δήλωση if, while, do, for ή switch μπορεί το καθένα να ορίσει ένα μπλοκ. Μια τέτοια δήλωση είναι μια σύνθετη δήλωση. Το όνομα μιας μεταβλητής που δηλώνεται σε ένα μπλοκ έχει εύρος μπλοκ. Το πεδίο εφαρμογής του ξεκινά από το σημείο δήλωσης και τελειώνει στο τέλος του μπλοκ του. Το παρακάτω σύντομο πρόγραμμα απεικονίζει αυτό για τη μεταβλητή, ταυτότητα:

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

intκύριος()
{
αν (1==1)
{
/*μερικές δηλώσεις*/
intταυτότητα= 5?
κόστος<<ταυτότητα<<' n'?
/*μερικές δηλώσεις*/
}
ΕΠΙΣΤΡΟΦΗ 0?
}

Μια μεταβλητή, όπως η ταυτότητα, που δηλώνεται στο πεδίο μπλοκ είναι μια τοπική μεταβλητή.

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

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

intκύριος()
{
intαναγνωριστικό= 8?

αν (αναγνωριστικό== 8)
{
κόστος<<αναγνωριστικό<<' n'?
}
ΕΠΙΣΤΡΟΦΗ 0?
}

Η έξοδος είναι 8. Υπάρχουν δύο πεδία μπλοκ εδώ: το μπλοκ για τη συνάρτηση main () και την ένθετη δήλωση if-composite. Το ένθετο μπλοκ είναι το πιθανό πεδίο εφαρμογής του κύριου () μπλοκ συναρτήσεων.

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

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

intκύριος()
{
αν (1 == 1)
{
intvariab= δεκαπέντε?
}
κόστος<<variab<<' n'? // σφάλμα: πρόσβαση εκτός του πεδίου εφαρμογής του.

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

Ο μεταγλωττιστής παράγει ένα μήνυμα σφάλματος για το variab.

Μια οντότητα που εισάγεται, δηλώνεται στην κεφαλίδα μιας σύνθετης συνάρτησης, δεν μπορεί να εμφανιστεί έξω (κάτω) της σύνθετης δήλωσης. Ο ακόλουθος κωδικός for-loop δεν θα μεταγλωττιστεί, με αποτέλεσμα ένα μήνυμα σφάλματος:

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

intκύριος()
{
Για (intΕγώ=0?Εγώ<4? ++Εγώ)
{
κόστος<<Εγώ<<''?
}
κόστος<<Εγώ<<''?

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

Η μεταβλητή επανάληψης, i, φαίνεται μέσα στο μπλοκ for-loop αλλά όχι έξω από το μπλοκ for-loop.

Πεδίο εφαρμογής

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

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

string fn(str. str)
{
απανθρακώνωstri[] = 'μπανάνες'?
/*άλλες δηλώσεις*/
string totalStr=Π+stri?
ΕΠΙΣΤΡΟΦΗtotalStr?
}

intκύριος()
{
συμβολοσειρά totStr=fn('τρώει ')?
κόστος<<totStr<<' n'?

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

Η έξοδος είναι:
τρώγοντας μπανάνες

Σημείωση: Μια οντότητα που δηλώνεται εκτός της συνάρτησης (πάνω από αυτήν) μπορεί να εμφανιστεί στη λίστα παραμέτρων λειτουργίας και επίσης στο μπλοκ συνάρτησης.

Επιγραφή

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

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

κενόςfn()
{
παω σεlabl?
/*άλλες δηλώσεις*/
labl: intδεν= 2?
κόστος<<δεν<<' n'?
}

intκύριος()
{
fn()?

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

Η έξοδος είναι 2.

Πεδίο εφαρμογής απαρίθμησης

Μη ελεγχόμενη απαρίθμηση
Εξετάστε το ακόλουθο if-block:

αν (1==1)
{
enum {α, β, γ=σι+2}?
κόστος<<προς το<<''<<σι<<''<<ντο<<' n'?
}

Η έξοδος είναι 0 1 3.

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

Η ακόλουθη δήλωση δεν θα μεταγλωττιστεί επειδή το σημείο δήλωσης του c είναι μετά από αυτό του a:

enum {προς το=ντο+2, προ ΧΡΙΣΤΟΥ}?

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

αν (1==1)
{
enum {α, β, γ=σι+2}?
}
κόστος<<προς το<<''<<σι<<''<<ντο<<' n'? // σφάλμα: εκτός εμβέλειας

Η παραπάνω απαρίθμηση περιγράφεται ως μη καταχωρημένη απαρίθμηση και οι απαριθμητές της περιγράφονται ως μη απογραφόμενοι απογραφείς. Αυτό συμβαίνει επειδή ξεκινά μόνο με την αποκλειστική λέξη, enum. Οι απαριθμήσεις που ξεκινούν με την κλάση enum ή το enum struct περιγράφονται ως εκτεταμένες απαριθμήσεις. Οι απαριθμητές τους περιγράφονται ως απογραφείς.

Περιορισμένη απαρίθμηση
Η ακόλουθη δήλωση είναι εντάξει:

enum τάξηαρσενικός{α, β, γ=σι+2}?

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

αν (1==1)
{
enum τάξηαρσενικός{α, β, γ=σι+2}?
κόστος<<προς το<<''<<σι<<''<<ντο<<' n'? // σφάλμα: εκτός πεδίου για τάξη enum ή enum struct
}

Πεδίο εφαρμογής της τάξης

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

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

// Τάξη βάσης
τάξηΚλα
{
ιδιωτικός:
intmemP= 5?
προστατεύονται:
intmemPro= 9?
δημόσιο:
κενόςfn()
{
κόστος<<memP<<' n'?
}
}?

// Παράγωγη τάξη
τάξηDerCla: δημόσιοΚλα
{
δημόσιο:
intderMem=memPro?
}?
intκύριος()
{
Cla obj?
objfn()?
DerCla derObj?
κόστος<<derObj.derMem<<' n'?

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

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

Στην κλάση Cla, η μεταβλητή memP, φαίνεται στο σημείο της δήλωσης. Μετά από αυτό, το σύντομο τμήμα του προστατευμένου παραλείπεται και στη συνέχεια εμφανίζεται ξανά στο μπλοκ συνάρτησης μέλους κλάσης. Η παράγωγη κλάση παραλείπεται και στη συνέχεια εμφανίζεται ξανά στο πεδίο κύριας () συνάρτησης (μπλοκ).

Στην κλάση Cla, η μεταβλητή memPro, φαίνεται στο σημείο της δήλωσης. Το τμήμα της δημόσιας συνάρτησης fn () παραλείπεται και στη συνέχεια εμφανίζεται στο μπλοκ περιγραφής κλάσης που προέρχεται. Εμφανίζεται ξανά κάτω στην κύρια () συνάρτηση.

Τελεστής επίλυσης πεδίου εφαρμογής
Ο τελεστής ανάλυσης εμβέλειας στο C ++ είναι ::. Χρησιμοποιείται για πρόσβαση σε ένα στατικό μέλος της τάξης. Το παρακάτω πρόγραμμα το δείχνει:

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

τάξηΚλα
{
δημόσιο:
στατικός int constmeme= 5?
δημόσιο:
στατικός κενόςfn()
{
κόστος<<meme<<' n'?
}
}?
intκύριος()
{
κόστος<<Κλα::meme<<' n'?
Κλα::fn()?

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

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

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

Πεδίο εφαρμογής παραμέτρων προτύπου

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

πρότυπο<τυπικό όνομαΤ,τυπικό όνομαU>> δομήΗλικίες
{
Τ Γιάννης= έντεκα?
Εσύ Πέτρο= 12.3?
Τ Μαίρη= 13?
U Joy= 14.6?
}?

Τα U και T φαίνονται μέσα στο μπλοκ.

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

πρότυπο<τυπικό όνομαΤ,τυπικό όνομαU>> κενόςλειτουργία(Εσύ όχι, χα,const απανθρακώνω *Π)?

Ωστόσο, όταν πρόκειται για την περιγραφή της τάξης (ορισμός), το εύρος μπορεί επίσης να είναι διαφορετικών τμημάτων όπως στον ακόλουθο κώδικα:

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

πρότυπο<τάξηΤ,τάξηU>> τάξηTheCla
{
δημόσιο:
t αριθ?
στατικόςU ch?

κενόςλειτουργία(Εσύ πατέρα,const απανθρακώνω *Π)
{
κόστος << 'Υπάρχουν ' <<σε ένα<< 'αξίζει βιβλία' <<όχι<<Π<< ' στο μαγαζί.' << ' n'?
}
στατικός κενόςδιασκέδαση(U ch)
{
αν (κεφ== 'προς το')
κόστος << «Επίσημη λειτουργία στατικών μελών» << ' n'?
}
}?

intκύριος()
{
TheCla<int,απανθρακώνω>>obj?
objσε ένα = 12?
objλειτουργία('$','500')?

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

Όνομα Απόκρυψη

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

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

κενόςfn()
{
intόπου= 3?
αν (1==1)
{
intόπου= 4?
κόστος<<όπου<<' n'?
}
κόστος<<όπου<<' n'?
}

intκύριος()
{
fn()?
ΕΠΙΣΤΡΟΦΗ 0?
}

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

Είναι επειδή το var στο ένθετο μπλοκ έκρυψε το var στο εξωτερικό μπλοκ.

Δυνατότητα επανάληψης της δήλωσης στο ίδιο πεδίο εφαρμογής

Το σημείο της δήλωσης είναι όπου το όνομα εισάγεται (για πρώτη φορά) στο πεδίο εφαρμογής του.

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

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

κενόςfn(intσε ένα)?
κενόςfn(intσε ένα)?

κενόςfn(intσε ένα)
{
κόστος<<σε ένα<<' n'?
}

intκύριος()
{
fn(5)?

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

Το πρόγραμμα λειτουργεί.

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

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

κενόςfn(intσε ένα)
{
κόστος<<σε ένα<<' n'?
}

κενόςfn(φλοτέρόχι)
{
κόστος<<όχι<<' n'?
}

intκύριος()
{
fn(5)?
φλοτέρflt= 8.7?
fn(flt)?

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

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

Οι υπερφορτωμένες συναρτήσεις έχουν οριστεί σε παγκόσμιο εύρος.

Πεδίο εφαρμογής Namespace

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

Πεδίο εφαρμογής σε διαφορετικές μερίδες

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

συμπέρασμα

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