Τι είναι μια κλάση αποθήκευσης στο C ++ και οι τύποι της;



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

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

Ας ξεκινήσουμε.





Τι είναι η κατηγορία αποθήκευσης στο C ++;

Κάθε μεταβλητή στο C ++ έχει τύπο δεδομένων και κλάση αποθήκευσης. Ο τύπος δεδομένων καθορίζει τον τύπο δεδομένων που μπορούν να αποθηκευτούν σε μια μεταβλητή όπως int, float, char κ.λπ. Η κλάση αποθήκευσης ελέγχει δύο διαφορετικές ιδιότητες μιας μεταβλητής: διάρκεια ζωής και εύρος.

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



Τύποι κατηγορίας αποθήκευσης

Υπάρχουν πέντε τάξεις αποθήκευσης σε ένα πρόγραμμα C ++:

  • αυτο
  • κανω ΕΓΓΡΑΦΗ
  • στατικός
  • εξωτερικός
  • ευμετάβλητος

Ας συζητήσουμε λεπτομερώς κάθε μία από τις τάξεις αποθήκευσης.

Κατηγορία αυτόματης αποθήκευσης

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



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

Μπορείτε να αποκτήσετε πρόσβαση σε αυτόματες μεταβλητές εκτός του πεδίου εφαρμογής τους χρησιμοποιώντας μια μεταβλητή δείκτη. Πρέπει να δείξετε την ίδια θέση μνήμης όπου βρίσκονται οι μεταβλητές.

Η διάρκεια ζωής της είναι η ίδια με τη διάρκεια ζωής της συνάρτησης. Μόλις ολοκληρωθεί η εκτέλεση μιας συνάρτησης, η μεταβλητή καταστρέφεται.

Από προεπιλογή, η τιμή απορριμμάτων τους αποδίδεται κατά τη δήλωση.

Σύνταξη:

τύπος δεδομένων var_name1 [= τιμή]

ή

αυτόματος τύπος δεδομένων var_name1 [= τιμή]

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

Εγγραφή κλάσης αποθήκευσης

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

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

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

Το μέγιστο μέγεθος της μεταβλητής είναι ίσο με το μέγεθος του καταχωρητή (δηλαδή μία λέξη περίπου). Δεν μπορεί να εφαρμοστεί ένας τεκμηριωμένος τελεστής «&», καθώς δεν διαθέτει θέση μνήμης.

Σύνταξη:

εγγραφή τύπου δεδομένων var_name1 [= τιμή]

Παράδειγμα:

πώς να εγκαταστήσετε το php 7 στα Windows 10
{εγγραφή int pi}

Ο ορισμός του «μητρώου» δεν σημαίνει ότι η μεταβλητή θα αποθηκευτεί σε ένα μητρώο. Μπορεί να αποθηκευτεί σε ένα μητρώο ανάλογα με το υλικό και τους περιορισμούς εφαρμογής.

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

Παράδειγμα:

#include using namespace std // δηλώνοντας τη μεταβλητή που πρόκειται να γίνει εξωτερικά // μια αρχική τιμή μπορεί επίσης να αρχικοποιηθεί σε x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // δηλώνοντας μια αυτόματη μεταβλητή (απλά // γράφοντας 'int a = 32' λειτουργεί επίσης) int num = 32 // εκτύπωση της αυτόματης μεταβλητής 'a' printf ('Value of the variabel' num '' 'δηλώθηκε ως αυτόματο:% dn', num) printf ( '--------------------------------')} άκυρο registerStorageClass () {printf ('nDemonstrating register classnn') / / δηλώνει ένα μητρώο μεταβλητής μητρώου char c = 'G' // εκτύπωση της μεταβλητής μητρώου 'b' printf ('Τιμή της μεταβλητής' c '' δηλώνεται ως καταχωρητής:% dn ', c) printf (' ---- ---------------------------- ')} int main () {// Για επίδειξη αυτόματης κλάσης αποθήκευσης autoStorageClass () // Για επίδειξη εγγραφή Storage Class registerStorageClass () επιστροφή 0}

Παραγωγή:

Έξοδος - Κατηγορία αποθήκευσης σε C ++ - EdurekaΚατηγορία στατικής αποθήκευσης

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

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

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

Σύνταξη:

στατικός τύπος δεδομένων var_name1 [= τιμή]

Παράδειγμα:

#include void function (void) static int c = 5 // Παγκόσμια στατική μεταβλητή main () {while (c--) {function ()} return 0} void function (void) {static int cnt = 2 cnt ++ std :: ραπτική<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Παραγωγή:

Εξωτερική κατηγορία αποθήκευσης

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

Η διάρκεια ζωής των εξωτερικών μεταβλητών είναι όσο το πρόγραμμα στο οποίο δηλώνεται τερματίζεται. Μια κανονική καθολική μεταβλητή μπορεί να γίνει και εξωτερικό, τοποθετώντας τη λέξη «εξωτερικό» πριν από τη δήλωση / ορισμό της σε οποιαδήποτε λειτουργία / μπλοκ.

Όταν χρησιμοποιείτε το 'extern', η μεταβλητή δεν μπορεί να αρχικοποιηθεί, καθώς το μόνο που κάνει είναι να δείχνει το όνομα της μεταβλητής σε μια θέση αποθήκευσης που έχει οριστεί προηγουμένως.

Σύνταξη

εξωτερικός τύπος δεδομένων var_name1

Παράδειγμα

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

Δεύτερο αρχείο: support.cpp

#include extern int cnt void write_extern (void) {std :: cout<< 'Count is ' << cnt << std::endl } 

Εδώ, η εξωτερική λέξη-κλειδί χρησιμοποιείται για να δηλώσει cnt σε άλλο αρχείο. Τώρα συντάξτε αυτά τα δύο αρχεία ως εξής & μείον

$ g ++ main.cpp support.cpp -o εγγραφή

Αυτό θα παράγει εκτελέσιμο πρόγραμμα εγγραφής, θα προσπαθήσει να εκτελέσει εγγραφή και θα ελέγξει το αποτέλεσμα ως εξής & μείον

$. / γράψτε

5

Προχωρώντας με την τάξη αποθήκευσης στο C ++, ας ρίξουμε μια ματιά στην τελευταία, δηλαδή την κατηγορία αποθήκευσης με δυνατότητα μετάλλαξης.

Κατηγορία αποθήκευσης με δυνατότητα αλλαγής

Ο προσδιοριστής μεταβλητής ισχύει μόνο για αντικείμενα κλάσης, το οποίο επιτρέπει σε ένα μέλος ενός αντικειμένου να παρακάμψει τη συνάρτηση μέλους const. Δηλαδή, ένα μεταβλητό μέλος μπορεί να τροποποιηθεί με μια συνάρτηση μέλους const.

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

Κατηγορία αποθήκευσης

Λέξη-κλειδί

Διάρκεια Ζωής

Ορατότητα

πώς να χρησιμοποιήσετε τη μέθοδο tostring

Αρχική τιμή

Αυτόματο

αυτο

Μπλοκ λειτουργιών

Τοπικός

Σκουπίδια

Εξωτερικός

εξωτερικός

Ολόκληρο το πρόγραμμα

Παγκόσμια

Μηδέν

Στατικός

στατικός

Ολόκληρο το πρόγραμμα

Τοπικός

Μηδέν

Κανω ΕΓΓΡΑΦΗ

κανω ΕΓΓΡΑΦΗ

κώδικας java για σύνδεση στο mysql

Μπλοκ λειτουργιών

Τοπικός

Σκουπίδια

Ευμετάβλητος

ευμετάβλητος

Τάξη

Τοπικός

Σκουπίδια

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

Έτσι, έχουμε φτάσει στο τέλος αυτού του άρθρου σχετικά με τις κατηγορίες αποθήκευσης στο C ++.

Εάν θέλετε να μάθετε περισσότερα, ρίξτε μια ματιά στο από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία μάθησης. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για να σας εκπαιδεύσει τόσο για βασικές όσο και για προχωρημένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Spring.

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