Τελευταία ενημέρωση: 08.10.2017

Εκτός από τις μεταβλητές και τις μεθόδους που σχετίζονται άμεσα με το αντικείμενο, η C++ σάς επιτρέπει να ορίσετε μεταβλητές και μεθόδους που σχετίζονται άμεσα με την κλάση ή με άλλο τρόπο. στατικά μέλητάξη. Οι στατικές μεταβλητές και οι μέθοδοι αναφέρονται γενικά σε ολόκληρη την τάξη. Η στατική λέξη-κλειδί χρησιμοποιείται για τον ορισμό τους.

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

#περιλαμβάνω κλάση Λογαριασμός ( δημόσιος: Λογαριασμός(διπλό άθροισμα) ( this->sum = άθροισμα; ) static int getRate() ( ποσοστό επιστροφής; ) static void setRate(int r) ( rate = r; ) double getIncome() ( άθροισμα επιστροφής + άθροισμα * ποσοστό / 100; ) private: διπλό άθροισμα, στατικό ποσοστό int; ) int Λογαριασμός::rate = 8; int main() ( Account account1(20000); Account account2(50000); Account::setRate(5); // reset rate std::cout<< "Rate: " << Account::getRate() << std::endl; std::cout << "Rate: " << account1.getRate() << " Income: " << account1.getIncome() << std::endl; std::cout << "Rate: " << account2.getRate() << " Income: " << account2.getIncome() << std::endl; return 0; }

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

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

Είναι επίσης σημαντικό ότι εάν η κλάση περιέχει στατικές μεταβλητές, τότε αυτές πρέπει να οριστούν επιπλέον εκτός της κλάσης:

Int Account::rate = 8;

Δεν είναι απαραίτητο να εκχωρήσετε μια αρχική τιμή σε μια μεταβλητή.

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

Λογαριασμός::getRate() account1.getRate()

Έξοδος κονσόλας του προγράμματος:

Rate: 5 Rate: 5 Εισόδημα: 21000 Rate: 5 Εισόδημα: 52500

Επίσης, στατικές σταθερές χρησιμοποιούνται συχνά σε κλάσεις. Για παράδειγμα, ας κάνουμε τη μεταβλητή τιμή σταθερή στην κλάση Account:

#περιλαμβάνω class Account ( public: const static int rate = 8; Account(double sum) ( this->sum = sum; ) double getIncome() ( return sum + sum * rate / 100; ) private: double sum; ); int main() ( Account account1(20000); Account account2(50000); std::cout<< "Rate: " << account1.rate << "\tIncome: " << account1.getIncome() << std::endl; std::cout << "Rate: " << account2.rate << "\tIncome: " << account2.getIncome() << std::endl; return 0; }

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

Εκτός από τον τροποποιητή πρόσβασης, μπορείτε να γράψετε μια λέξη-κλειδί πριν από το όνομα ενός πεδίου, μεθόδου ή ιδιότητας στατικός .
« στατικός " σημαίνει ότι το δεδομένο πεδίο, μέθοδος ή ιδιότητα δεν θα ανήκει σε κάθε αντικείμενο της κλάσης, αλλά σε όλα μαζί.

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

Ας δούμε το παράδειγμα των τίγρεων. Ας ορίσουμε την τάξη " Τίγρη". Αν γράψουμε το πεδίο της τάξης ως εξής: δημόσιος αριθμός int?τότε κάθε αντικείμενο θα έχει αυτό το πεδίο και κάθε αντικείμενο θα έχει το δικό του. Επιπλέον, εάν δεν δημιουργηθεί ούτε ένα αντικείμενο, τότε αυτό το πεδίο δεν θα υπάρχει καθόλου.
Επομένως, ας κάνουμε αυτό το πεδίο στατικό ( στατικός).

Ας δημιουργήσουμε έναν κατασκευαστή στον οποίο θα αυξήσουμε τον μετρητή μετρώκατά τη δημιουργία κάθε νέου αντικειμένου:
public Tiger() (count++; ).
Εδώ μπορούμε επίσης να ορίσουμε τα μεμονωμένα χαρακτηριστικά της τίγρης: βάρος, ύψος, ψευδώνυμο.

Θα γράψουμε επίσης μια στατική μέθοδο που εμφανίζει τον αριθμό των δημιουργημένων αντικειμένων:
δημόσιο στατικό κενό ShowNumberOfObjects().

Τότε η εφαρμογή της κονσόλας μας θα έχει δύο κατηγορίες:

Public class Tiger ( public static int count; public Tiger() ( count++; ) public static void ShowNumberOfObjects() ( Console.WriteLine("Tigers = (0)", Tiger.count.ToString()); ) ) class Program ( static void Main(string args) ( // Ποιος είναι ο αριθμός των τίγρεων χωρίς δημιουργία αντικειμένων; Tiger.ShowNumberOfObjects(); // 0 γιατί δεν έχουμε δημιουργήσει ακόμα αντικείμενα // Δημιουργία 3 τίγρεων Tiger t1 = new Tiger (); Tiger t2 = new Tiger (); Tiger t3 = new Tiger (); Tiger.ShowNumberOfObjects(); // Θα βγουν 3 τίγρεις Console.ReadLine(); ) )

Αποτέλεσμα: 3.

Συμπέρασμα. Μια στατική μέθοδος σάς επιτρέπει να την καλέσετε χωρίς να έχετε διαθέσιμο αντικείμενο. Αντί για το όνομα του αντικειμένου, κατά την κλήση της μεθόδου, καθορίζεται το όνομα της κλάσης Tiger: Tiger.ShowNumberOfObjects();

Διαφορές μεταξύ μιας στατικής μεθόδου και μιας μη στατικής μεθόδου:

1. Δεν χρειάζεστε αντικείμενο για να καλέσετε μια στατική μέθοδο.
2. Μέσα στη στατική μέθοδο, αυτή η μεταβλητή που δείχνει προς το αντικείμενο δεν είναι διαθέσιμη· κατά συνέπεια, όλα τα μη στατικά πεδία αυτής της κλάσης δεν είναι διαθέσιμα, επειδή σαν κανένα αντικείμενο.
3. Μέσα σε μια κανονική μέθοδο, είναι διαθέσιμα τόσο στατικά όσο και μη στατικά πεδία.
4. Ξεκινώντας με το C# 4.0, κατέστη δυνατό να γίνει η ίδια η τάξη στατική.

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

Τώρα ας ασχοληθούμε με την έννοια της «δομής» και ας μάθουμε τη διαφορά της από μια τάξη.

Τελευταία ενημέρωση: 25/12/2018

Εκτός από τα συνηθισμένα πεδία, μεθόδους, ιδιότητες, μια κλάση μπορεί να έχει στατικά πεδία, μεθόδους, ιδιότητες. Στατικά πεδία, μέθοδοι, ιδιότητες αναφέρονται σε ολόκληρη την κλάση και δεν είναι απαραίτητο να δημιουργηθεί ένα στιγμιότυπο της κλάσης για πρόσβαση σε παρόμοια μέλη κλάσης. Για παράδειγμα:

Λογαριασμός κλάσης ( δημόσιο στατικό δεκαδικό μπόνους = 100; δημόσιο δεκαδικό σύνολο; δημόσιος λογαριασμός(δεκαδικό άθροισμα) ( σύνολο άθροισμα = άθροισμα + μπόνους; ) ) Πρόγραμμα κλάσης ( στατικό κενό Κύριο(args συμβολοσειράς) ( Console.WriteLine(Account.bonus); / / 100 Account.bonus += 200;Account account1 = new Account(150);Console.WriteLine(account1.totalSum); // 450 Account account2 = new Account(1000);Console.WriteLine(account2.totalSum); // 1300 Console.ReadKey(); ) )

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

Console.WriteLine(Account.bonus); Account.bonus += 200;

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

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

Στατικές Ιδιότητες και Μέθοδοι

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

Λογαριασμός Τάξης ( δημόσιος Λογαριασμός (δεκαδικό άθροισμα, δεκαδικός συντελεστής) ( εάν (άθροισμα< MinSum) throw new Exception("Недопустимая сумма!"); Sum = sum; Rate = rate; } private static decimal minSum = 100; // минимальная допустимая сумма для всех счетов public static decimal MinSum { get { return minSum; } set { if(value>0) minSum = τιμή; ) ) δημόσιο δεκαδικό άθροισμα ( get; ιδιωτικό σύνολο; ) // ποσό στον λογαριασμό δημόσιο δεκαδικό επιτόκιο ( get; ιδιωτικό σύνολο; ) // επιτόκιο // υπολογισμός του ποσού στον λογαριασμό μετά από μια ορισμένη περίοδο με ένα ορισμένο δημόσιο επιτόκιο στατικό δεκαδικό GetSum(δεκαδικό άθροισμα, δεκαδικός ρυθμός, περίοδος int) ( δεκαδικό αποτέλεσμα = άθροισμα; για (int i = 1; i<= period; i++) result = result + result * rate / 100; return result; } }

Η μεταβλητή minSum, η ιδιότητα MinSum και η μέθοδος GetSum ορίζονται εδώ με τη στατική λέξη-κλειδί, που σημαίνει ότι είναι στατικές.

Η μεταβλητή minSum και η ιδιότητα MinSum αντιπροσωπεύουν το ελάχιστο ποσό που επιτρέπεται για τη δημιουργία ενός τιμολογίου. Αυτός ο δείκτης δεν αναφέρεται σε κανένα συγκεκριμένο λογαριασμό, αλλά ισχύει για όλους τους λογαριασμούς γενικά. Εάν αλλάξουμε αυτόν τον δείκτη για έναν λογαριασμό, τότε πρέπει να αλλάξει και για τον άλλο λογαριασμό. Δηλαδή, σε αντίθεση με τις ιδιότητες Sum και Rate, που αποθηκεύουν την κατάσταση ενός αντικειμένου, η μεταβλητή minSum αποθηκεύει την κατάσταση για όλα τα αντικείμενα μιας δεδομένης κλάσης.

Το ίδιο και με τη μέθοδο GetSum - υπολογίζει το ποσό στον λογαριασμό μετά από μια ορισμένη περίοδο με ένα συγκεκριμένο επιτόκιο για ένα συγκεκριμένο αρχικό ποσό. Η κλήση και το αποτέλεσμα αυτής της μεθόδου δεν εξαρτώνται από ένα συγκεκριμένο αντικείμενο ή την κατάστασή του.

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

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

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

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

Χρήστης κλάσης ( ιδιωτικός στατικός μετρητής int = 0; public User() ( counter++; ) public static void DisplayCounter() ( Console.WriteLine($"Created (counter) User objects"); ) ) class Program ( static void Main(string args) ( User user1 = νέος χρήστης (); User user2 = νέος χρήστης (); User user3 = νέος χρήστης (); User user4 = νέος χρήστης (); User user5 = νέος χρήστης (); User.DisplayCounter (); / / 5 Console.ReadKey(); ) )

Στατικός κατασκευαστής

Εκτός από τους κανονικούς κατασκευαστές, μια κλάση μπορεί επίσης να έχει στατικούς κατασκευαστές. Οι στατικοί κατασκευαστές έχουν τα ακόλουθα διακριτικά χαρακτηριστικά:

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

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

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

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

Ας ορίσουμε έναν στατικό κατασκευαστή:

Χρήστης κλάσης ( static User() ( Console.WriteLine ("Ο πρώτος χρήστης δημιουργήθηκε"); ) ) class Program ( static void Main(string args) ( User user1 = new User(); // static constructor θα λειτουργήσει εδώ Χρήστης user2 = νέος χρήστης(); Console.Read(); ) )

Στατικές τάξεις

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

Στατική κλάση Λογαριασμός ( ιδιωτικό στατικό δεκαδικό minSum = 100; // ελάχιστο επιτρεπόμενο ποσό για όλους τους λογαριασμούς δημόσιο στατικό δεκαδικό MinSum ( get ( return minSum; ) set ( if(value>0) minSum = value; ) ) // υπολογισμός του λογαριασμού ποσό μετά από μια ορισμένη περίοδο με συγκεκριμένο ρυθμό δημόσιο στατικό δεκαδικό GetSum(δεκαδικό άθροισμα, δεκαδικός ρυθμός, περίοδος int) ( δεκαδικό αποτέλεσμα = άθροισμα; για (int i = 1; i<= period; i++) result = result + result * rate / 100; return result; } }

Στη C#, ένα καλό παράδειγμα στατικής κλάσης είναι η τάξη Math, η οποία χρησιμοποιείται για διάφορες μαθηματικές πράξεις.

Μάθημα 25

Μέχρι τώρα, κάθε αντικείμενο που δημιουργείτε έχει το δικό του σύνολο στοιχείων δεδομένων. Ανάλογα με το σκοπό της αίτησής σας, μπορεί να υπάρχουν περιπτώσεις όπου αντικείμενα της ίδιας κλάσης πρέπει να μοιράζονται ένα ή περισσότερα μέλη δεδομένων. Για παράδειγμα, ας υποθέσουμε ότι γράφετε ένα πρόγραμμα πληρωμών που παρακολουθεί τις ώρες εργασίας για 1.000 υπαλλήλους. Για τον καθορισμό του φορολογικού συντελεστή, το πρόγραμμα πρέπει να γνωρίζει τις συνθήκες υπό τις οποίες εργάζεται κάθε εργαζόμενος. Ας χρησιμοποιήσουμε μια μεταβλητή κλάσης για αυτό κατάσταση_εργασίας.Ωστόσο, εάν όλοι οι εργαζόμενοι εργάζονται υπό τις ίδιες συνθήκες, το πρόγραμμά σας θα μπορούσε να μοιραστεί αυτό το στοιχείο δεδομένων για όλα τα αντικείμενα του τύπου υπάλληλος.Έτσι, το πρόγραμμά σας μειώνει την απαιτούμενη ποσότητα μνήμης πετώντας 999 αντίγραφα των ίδιων πληροφοριών. Για να μοιραστείτε ένα στοιχείο μιας κλάσης, πρέπει να δηλώσετε αυτό το στοιχείο ως στατικός (στατικός).Αυτό το μάθημα καλύπτει τα βήματα που πρέπει να κάνετε για να μοιραστείτε ένα στοιχείο κλάσης μεταξύ πολλών αντικειμένων. Μέχρι το τέλος αυτού του μαθήματος, θα έχετε κατακτήσει τις ακόλουθες βασικές έννοιες:

    Η C++ σάς επιτρέπει να έχετε αντικείμενα του ίδιου τύπου που μοιράζονται ένα ή περισσότερα μέλη μιας κλάσης.

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

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

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

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

ΚΟΙΝΟΧΡΗΣΤΑ ΕΙΔΗ

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

private: static int shared_value;

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

int class_name::shared_value;

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

#περιλαμβάνω

#περιλαμβάνω

τάξη βιβλίο_σειρά

( public: book_series (char *, char *, float); void show_book(void); void set_pages(int) ; private: static int page_count; char title; char author[ 64 ]; float price; );

int book_series::page__count;

void book_series::set_pages(int pages)

( page_count = σελίδες; )

book_series::book_series (char *title, char *author, float price)

( strcpy(book_series::title, title); strcpy(book_series::author, author); book_series::price = price; )

void book_series::show_book(void)

(cout<< "Заголовок: " << title << endl; cout << "Автор: " << author << endl; cout << "Цена: " << price << endl; cout << "Страницы: " << page_count << endl; }

( book_series programming("Learning to Program in C++", "Jamsa", 22.95); book_series word("Learning to Use Word for Windows", "Wyatt", 19.95); word.set_pages(256); programming.show_book () ; word.show_book() ; cout<< endl << "Изменение page_count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }

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

Κοινή χρήση μελών της τάξης

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

Χρήση στοιχείων με χαρακτηριστικάδημόσια στατική αν αντικείμενα δεν υπάρχουν

Όπως μόλις μάθατε, όταν δηλώνετε μέλος μιας τάξης ως στατικόςαυτό το στοιχείο είναι κοινόχρηστο από όλα τα αντικείμενα της δεδομένης κλάσης. Ωστόσο, μπορεί να υπάρχουν περιπτώσεις όπου το πρόγραμμα δεν έχει δημιουργήσει ακόμη το αντικείμενο, αλλά χρειάζεται να χρησιμοποιήσει το στοιχείο. Για να χρησιμοποιήσετε ένα στοιχείο, το πρόγραμμά σας πρέπει να το δηλώσει ως δημόσιοκαι στατικός.Για παράδειγμα, το ακόλουθο πρόγραμμα USE_MBR.CPP χρησιμοποιεί το στοιχείο page_countαπό την τάξη σειρά βιβλίων,ακόμα κι αν δεν υπάρχουν αντικείμενα αυτής της κλάσης:

#περιλαμβάνω

#περιλαμβάνω

τάξη βιβλίο_σειρά

( public: static int page_count; private: char title ; char author; float price; );

int book_series::page_count;

void main(void) ( book_series::page_count = 256; cout<< "Текущее значение page_count равно " << book_series::page_count << endl; }

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

ΧΡΗΣΗ ΣΤΑΤΙΚΩΝ ΛΕΙΤΟΥΡΓΙΩΝ ΜΕΛΩΝ

Το προηγούμενο πρόγραμμα επεξηγούσε τη χρήση στατικόςστοιχεία δεδομένων. Ομοίως, η C++ σας επιτρέπει να ορίσετε στατικόςσυναρτήσεις μελών (μέθοδοι). Αν δημιουργείτε στατικόςμέθοδο, το πρόγραμμά σας μπορεί να καλέσει αυτήν τη μέθοδο ακόμα κι αν δεν έχουν δημιουργηθεί αντικείμενα. Για παράδειγμα, εάν η κλάση περιέχει μια μέθοδο που μπορεί να χρησιμοποιηθεί σε δεδομένα εκτός της κλάσης, θα μπορούσατε να δημιουργήσετε αυτήν τη μέθοδο στατικός.Παρακάτω είναι η τάξη μενού,που χρησιμοποιεί την ακολουθία esc του προγράμματος οδήγησης ANSI για να καθαρίσει την οθόνη. Εάν έχετε εγκατεστημένο το πρόγραμμα οδήγησης ANSI.SYS στο σύστημά σας, μπορείτε να χρησιμοποιήσετε τη μέθοδο καθαρή οθόνηγια να καθαρίσετε την οθόνη. Επειδή αυτή η μέθοδος δηλώνεται ως στατικός,το πρόγραμμα μπορεί να το χρησιμοποιήσει ακόμα και αν αντικείμενα του τύπου μενούδεν υπάρχει. Το ακόλουθο πρόγραμμα CLR_SCR.CPP χρησιμοποιεί τη μέθοδο καθαρή οθόνηγια να καθαρίσετε την οθόνη:

#περιλαμβάνω

( public: static void clear_screen(void); // Οι άλλες μέθοδοι θα πρέπει να είναι εδώ ιδιωτικές: int number_of_menu_options; );

void menu::clear_screen(void)

(cout<< "\033" << "}