Στατική συνάρτηση μέλους σε C++ (Παραδείγματα)
Τι είναι μια στατική συνάρτηση σε C++?
In C++ κλάσεις, ένα στατικό μέλος είναι ένα μέλος κλάσης που ανήκει στην κλάση και όχι στα αντικείμενά της. Θα έχετε μόνο ένα αντίγραφο της συνδρομής. Αυτό συμβαίνει ανεξάρτητα από τον αριθμό των αντικειμένων που δημιουργείτε.
Όταν μια συνάρτηση κλάσης ορίζεται ως στατική, όλα τα αντικείμενα κλάσης μοιράζονται ένα στατικό μέλος κλάσης. Η στατική συνάρτηση μπορεί επομένως να προσπελαστεί χωρίς τη δημιουργία αντικειμένων κλάσης και γίνεται ανεξάρτητη από αντικείμενα τάξης. Ένα μέλος στατικών δεδομένων σε C++ μπορεί να έχει πρόσβαση σε άλλες στατικές συναρτήσεις, εκτός της κλάσης μόνο.
Γιατί να χρησιμοποιήσετε Στατικές Συναρτήσεις;
Σε αντίθεση με C++ καθολικές συναρτήσεις, οι στατικές συναρτήσεις είναι προσβάσιμες μόνο από το αρχείο δήλωσης. Εάν υπάρχει ανάγκη περιορισμού της πρόσβασης σε μια συνάρτηση, κάντε την στατική.
Χρησιμοποιήστε μια στατική συνάρτηση για να περιορίσετε την επαναχρησιμοποίηση του ίδιου ονόματος συνάρτησης σε άλλο αρχείο.
Καθορισμός στατικών συναρτήσεων σε C++
Σύνταξη:
static int myfunc(void)
{
cout("Example of C++ static function ");
}
Στο παραπάνω παράδειγμα, ορίζουμε μια στατική συνάρτηση με το όνομα myfunc. Παρατηρήστε τη χρήση της στατικής λέξης-κλειδιού στον ορισμό. Η λέξη-κλειδί βρίσκεται πριν από το όνομα της συνάρτησης.
Στατική συνάρτηση μέλους σε C++
Όταν ένα μέλος συνάρτησης δηλώνεται στατικό, γίνεται ανεξάρτητο από άλλα αντικείμενα της κλάσης. Μπορείτε να καλέσετε μια συνάρτηση στατικού μέλους ακόμα κι αν δεν υπάρχουν άλλα αντικείμενα κλάσης.
Για να αποκτήσετε πρόσβαση σε ονόματα κλάσεων, θα πρέπει να χρησιμοποιήσετε το όνομα της κλάσης και τον τελεστή ανάλυσης πεδίου (::). Μια στατική συνάρτηση μπορεί να έχει πρόσβαση μόνο σε άλλες στατικές συναρτήσεις, στατικά μέλη δεδομένων και σε άλλες συναρτήσεις εκτός κλάσης. Το εύρος των στατικών συναρτήσεων μέλους βρίσκεται εντός της κλάσης και δεν μπορούν να έχουν πρόσβαση σε αυτόν τον δείκτη κλάσης.
Παράδειγμα 1
#include<iostream>
using namespace std;
class BoxClass {
public:
static int count;
BoxClass(double l = 2.0, double b = 2.0, double h = 2.0) {
cout << "Class constructor called." << endl;
length = l;
breadth = b;
height = h;
count++;
}
double getVolume() {
return length * breadth * height;
}
static int getCount() {
return count;
}
private:
double length;
double breadth;
double height;
};
int BoxClass::count = 0;
int main(void) {
cout << "Inital value of count is : " << BoxClass::getCount() << endl;
BoxClass Box1(3.2, 1.4, 1.8);
BoxClass Box2(7.5, 4.0, 4.0);
cout << "Final value of count is : " << BoxClass::getCount() << endl;
return 0;
}
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλαμβανομένου του αρχείου κεφαλίδας iostream στο δικό μας C++ πρόγραμμα για να το χρησιμοποιήσετε λειτουργίες.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικα για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με όνομα BoxΚατηγορίας
- Χρησιμοποιήστε τον τροποποιητή δημόσιας πρόσβασης για να επισημάνετε ένα μέλος τάξης που είναι δημόσια προσβάσιμο.
- Δηλώστε ένα στατικό μέλος κλάσης με όνομα count.
- Χρησιμοποιήστε έναν κατασκευαστή κλάσης για να αρχικοποιήσετε τρεις μεταβλητές διπλού τύπου.
- Εκτυπώστε λίγο κείμενο στην κονσόλα. Η συνάρτηση endl (τελική γραμμή) μετακινεί τον κέρσορα του ποντικιού στην επόμενη γραμμή.
- Αρχικοποιήστε την τιμή του l σε μεταβλητό μήκος.
- Αρχικοποιήστε την τιμή του b σε μεταβλητό πλάτος.
- Αρχικοποιήστε την τιμή του h σε μεταβλητό ύψος.
- Στη συνέχεια, αυξήστε την τιμή του πλήθους μεταβλητών κατά 1 κάθε φορά που δημιουργείται ένα νέο αντικείμενο.
- Τέλος του σώματος του κατασκευαστή.
- Δημιουργήστε μια συνάρτηση με το όνομα doublevolume().
- Ορίστε τι θα επιστρέψει η συνάρτηση doubleVolume(). Θα πρέπει να επιστρέψει τον πολλαπλασιασμό των μεταβλητών μήκους, πλάτους και ύψους.
- Τέλος του σώματος της συνάρτησης doubleVolume().
- Δηλώστε μια στατική συνάρτηση με το όνομα getCount().
- Η συνάρτηση getCount() θα πρέπει να επιστρέψει την τιμή της μεταβλητής count.
- Τέλος του σώματος της συνάρτησης getCount().
- Χρησιμοποιήστε τον τροποποιητή ιδιωτικής πρόσβασης για να επισημάνετε ένα μέλος της τάξης ως δημόσια προσβάσιμο.
- Δήλωση ενός μέλους κλάσης με όνομα μήκος ενός διπλού τύπου δεδομένων. Θα είναι ιδιωτικά προσβάσιμο.
- Δηλώστε ένα άλλο μέλος κλάσης με το όνομα πλάτος ενός διπλού τύπου δεδομένων. Θα είναι ιδιωτικά προσβάσιμο.
- Δήλωση ενός μέλους κλάσης με όνομα ύψος διπλού τύπου δεδομένων. Θα είναι ιδιωτικά προσβάσιμο.
- Τέλος του σώματος του BoxΤάξη τάξης.
- Στη συνέχεια, αρχικοποιήστε ένα στατικό μέλος του BoxΤάξη τάξης.
- Κλήση της συνάρτησης main(). Ο C++ Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Εκτυπώστε κάποιο κείμενο στην κονσόλα που δηλώνει τον τρέχοντα αριθμό αντικειμένων πριν δημιουργηθούν νέα αντικείμενα.
- Δηλώστε ένα αντικείμενο με όνομα Box1, που είναι ένα από τα παραδείγματα της τάξης BoxΤάξη. Οι τιμές πλάτους, μήκους και ύψους πρέπει να προσδιορίζονται μέσα στην παρένθεση.
- Δηλώστε ένα αντικείμενο με όνομα Box2, που είναι ένα παράδειγμα της τάξης BoxΤάξη. Οι τιμές πλάτους, μήκους και ύψους έχουν καθοριστεί μέσα στην παρένθεση.
- Εκτυπώστε κάποιο κείμενο στην κονσόλα που δηλώνει τον τρέχοντα αριθμό αντικειμένων μετά τη δημιουργία νέων αντικειμένων.
- The C++ πρόγραμμα πρέπει να επιστρέψει τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της συνάρτησης main().
Πρόσβαση σε στατικές λειτουργίες
Δεν χρειάζεται να δημιουργήσετε ένα αντικείμενο κλάσης για να αποκτήσετε πρόσβαση σε μια στατική συνάρτηση. Αντ 'αυτού, μπορείτε να χρησιμοποιήσετε το όνομα της κλάσης και τον τελεστή ανάλυσης πεδίου (::).
Σύνταξη:
className::funcName
Παραπάνω, το className είναι το όνομα της κλάσης όπου έχει οριστεί η στατική συνάρτηση. Το funcName είναι το όνομα που έχει εκχωρηθεί στη στατική συνάρτηση.
Παράδειγμα 2
#include<iostream>
using namespace std;
class MyClass {
public:
static void msgFunc() {
cout << "Welcome to Guru99!";
}
};
int main() {
MyClass::msgFunc();
}
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπερίληψη του αρχείου κεφαλίδας iostream στο πρόγραμμά μας για να χρησιμοποιήσουμε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά σας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με το όνομα MyClass.
- Χρησιμοποιήστε τον τροποποιητή δημόσιας πρόσβασης για να επισημάνετε ένα μέλος της τάξης ως δημόσια προσβάσιμο.
- Δήλωση μιας στατικής συνάρτησης με το όνομα msgFunc(). Η στατική λέξη-κλειδί κάνει τη συνάρτηση στατική.
- Καθορίστε το κείμενο που θα εκτυπωθεί στην κονσόλα μόλις κληθεί/κληθεί η παραπάνω συνάρτηση.
- Τέλος του σώματος της συνάρτησης msgFunc().
- Τέρμα το σώμα της τάξης.
- Κλήση της συνάρτησης main().
- Καλέστε τη στατική συνάρτηση με το όνομα msgFunc().
- Τέλος του σώματος της συνάρτησης main().
Πρόσβαση σε στατικές μεταβλητές
Οι στατικές μεταβλητές ανήκουν σε μια κλάση και όχι σε αντικείμενα κλάσης. Εάν μια στατική μεταβλητή είναι δημόσια, είναι προσβάσιμη χρησιμοποιώντας το όνομα της κλάσης και χρησιμοποιώντας τον τελεστή ανάλυσης εύρους. Ωστόσο, αυτό δεν είναι δυνατό εάν ένα στατικό μέλος είναι ιδιωτικό.
Κανονικά, η πρόσβαση στις ιδιωτικές μεταβλητές γίνεται χρησιμοποιώντας δημόσιες συναρτήσεις. Ωστόσο, πρέπει να δημιουργηθεί ένα στιγμιότυπο/αντικείμενο κλάσης. Η λύση είναι να χρησιμοποιήσετε μια στατική συνάρτηση.
Παράδειγμα 3: Στατική μεταβλητή in C++ τάξη
#include<iostream>
using namespace std;
class AClass {
private:
static int myvar;
public:
static int getVar() {
return myvar;
}
};
int AClass::myvar = 23;
int main() {
cout <<"The value of myvar is: "<< AClass::getVar() << '\n';
}
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπερίληψη του αρχείου κεφαλίδας iostream στο πρόγραμμά μας.
- Συμπεριλάβετε τον χώρο ονομάτων std σε αυτό το πρόγραμμα για να χρησιμοποιήσετε τις κλάσεις του χωρίς κλήση.
- Δημιουργήστε μια τάξη με το όνομα AClass.
- Χρησιμοποιήστε τον τροποποιητή ιδιωτικής πρόσβασης για να κάνετε τη μεταβλητή myvar ιδιωτικά προσβάσιμη.
- Δημιουργήστε μια στατική ακέραια μεταβλητή με το όνομα myvar.
- Χρησιμοποιήστε τον τροποποιητή δημόσιας πρόσβασης που επισημαίνει τη συνάρτηση getVar() ως δημόσια προσβάσιμη.
- Δημιουργία μιας στατικής συνάρτησης με το όνομα getVar().
- Η συνάρτηση getVar() θα πρέπει να μπορεί να επιστρέψει την τιμή της μεταβλητής myvar.
- Τέλος του σώματος της συνάρτησης getVar().
- Τέλος του σώματος της κατηγορίας AClass.
- Εκχωρήστε στη μεταβλητή myvar μια τιμή 23. Χρησιμοποιήσαμε το όνομα της κλάσης και τον τελεστή ανάλυσης πεδίου για αυτό.
- Κλήση της συνάρτησης main().
- Εκτυπώστε την τιμή της μεταβλητής myVar στην κονσόλα μαζί με άλλο κείμενο. Χρησιμοποιήσαμε το όνομα της κλάσης, τη στατική συνάρτηση και τον τελεστή ανάλυσης εύρους για πρόσβαση στην τιμή αυτής της μεταβλητής.
- Το τέλος του σώματος συνάρτησης main().
αυτός ο δείκτης στις στατικές συναρτήσεις
Μια στατική συνάρτηση δεν είναι συνδεδεμένη με ένα αντικείμενο. Γι' αυτό οι στατικές συναρτήσεις δεν έχουν αυτόν τον δείκτη. Ο δείκτης ενός αντικειμένου συνήθως δείχνει το αντικείμενο στο οποίο εργάζεται αυτήν τη στιγμή. Δεδομένου ότι οι στατικές συναρτήσεις δεν λειτουργούν με αντικείμενα, δεν υπάρχει ανάγκη για αυτόν τον δείκτη.
Οι στατικές συναρτήσεις έχουν άμεση πρόσβαση σε άλλα στατικά μέλη. Ωστόσο, αυτό δεν συμβαίνει με τα μη στατικά μέλη. Ο λόγος είναι ότι τα μη στατικά μέλη πρέπει να ανήκουν σε ένα αντικείμενο, αλλά οι στατικές συναρτήσεις δεν έχουν αντικείμενα για να εργαστούν.
Παράδειγμα 4
Είναι δυνατός ο ορισμός μιας στατικής συνάρτησης εκτός δήλωσης κλάσης. Ας το αποδείξουμε:
#include<iostream>
using namespace std;
class NumGenerator {
private:
static int nextNum;
public:
static int getNextNum();
};
int NumGenerator::nextNum = 1;
int NumGenerator::getNextNum() {
return nextNum++;
}
int main() {
for (int count = 0; count < 5; ++count)
std::cout << "The next number is: " << NumGenerator::getNextNum() << '\n';
return 0;
}
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικά σας:
Επεξήγηση κώδικα:
- Συμπερίληψη του αρχείου κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσουμε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Δημιουργήστε μια τάξη με το όνομα NumGenerator.
- Χρησιμοποιώντας τον τροποποιητή ιδιωτικής πρόσβασης για να επισημάνουμε τη μεταβλητή, πρόκειται να δημιουργήσουμε ως ιδιωτικά προσβάσιμη.
- Δημιουργήστε μια στατική ακέραια μεταβλητή με το όνομα nextNum.
- Χρησιμοποιώντας τον τροποποιητή δημόσιας πρόσβασης που σας βοηθά να επισημάνετε τη μεταβλητή που πρόκειται να δημιουργήσουμε ως δημόσια προσβάσιμη.
- Δήλωση μιας στατικής συνάρτησης με το όνομα getNextNum().
- Τέλος του σώματος της τάξης.
- Εκχωρήστε στη μεταβλητή nextNum μια τιμή 1. Το έχουμε κάνει χρησιμοποιώντας το όνομα κλάσης, το όνομα της μεταβλητής και τον τελεστή ανάλυσης πεδίου.
- Ορισμός της στατικής συνάρτησης getNextNum() εκτός κλάσης.
- Καθορίστε την ενέργεια που θα γίνει όταν καλείται/κληθεί η παραπάνω συνάρτηση. Θα αυξήσει την τιμή της μεταβλητής nextNum κατά 1.
- Τέλος ορισμού της συνάρτησης getNextNum().
- Κλήση της συνάρτησης main(). Ο C++ Η λογική του προγράμματος θα πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Χρήση για βρόχο για να δημιουργήσετε μια μεταβλητή με όνομα count. Η τιμή αυτής της μεταβλητής θα πρέπει να αυξάνεται από 0 σε 4. Μετά από κάθε επανάληψη, η τιμή της μεταβλητής θα αυξάνεται κατά 1.
- Εκτύπωση της τιμής της μεταβλητής nextNum μαζί με άλλο κείμενο στην κονσόλα σε κάθε επανάληψη. Η πρόσβαση στην τιμή γίνεται χρησιμοποιώντας τη συνάρτηση getNextNum().
- Αυτός ο διαλογισμός στα C++ το πρόγραμμα πρέπει να επιστρέψει τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος της συνάρτησης main().
Περίληψη
- C++ Τα στατικά μέλη είναι μέλη κλάσης που ανήκουν στην κλάση και όχι στα αντικείμενά της.
- Θα έχετε μόνο ένα αντίγραφο ενός στατικού μέλους ανεξάρτητα από τον αριθμό των αντικειμένων που δημιουργείτε.
- Όλα τα αντικείμενα κλάσης μοιράζονται κάθε στατικό μέλος κλάσης.
- Αφού ορίσουμε μια συνάρτηση κλάσης ως στατική, γίνεται ανεξάρτητη από τα αντικείμενα της κλάσης.
- Μια στατική συνάρτηση είναι προσβάσιμη ακόμα κι αν δεν δημιουργήσετε κανένα αντικείμενο κλάσης.
- Ωστόσο, οι στατικές συναρτήσεις δεν έχουν αυτό το αντικείμενο, το οποίο οδηγεί σε αντικείμενα κλάσης.






