Funcția membru static în C++ (Exemple)
În ce este o funcție statică C++?
In C++ clase, un membru static este un membru al clasei care aparține clasei mai degrabă decât obiectelor acesteia. Veți avea o singură copie a calității de membru. Acesta este cazul, indiferent de numărul de obiecte pe care le creați.
Când o funcție de clasă este definită ca fiind statică, toate obiectele de clasă au un membru static al clasei. Prin urmare, funcția statică poate fi accesată fără a crea obiecte de clasă și devine independentă de obiecte de clasă. Un membru de date static în C++ poate accesa alte funcții statice, numai în afara clasei.
De ce să folosiți funcții statice?
Spre deosebire de C++ funcțiile globale, funcțiile statice sunt accesibile doar din fișierul de declarație. Dacă este necesar să restricționați accesul la o funcție, faceți-o statică.
Utilizați o funcție statică pentru a restricționa reutilizarea aceluiași nume de funcție într-un alt fișier.
Definirea funcțiilor statice în C++
Sintaxă:
static int myfunc(void)
{
cout("Example of C++ static function ");
}
În exemplul de mai sus, definim o funcție statică numită myfunc. Observați utilizarea cuvântului cheie static în definiție. Cuvântul cheie vine înaintea numelui funcției.
Funcția membru static în C++
Când un membru al funcției este declarat static, acesta devine independent de alte obiecte din clasă. Puteți apela o funcție membru statică chiar dacă nu există alte obiecte de clasă.
Pentru a accesa numele claselor, ar trebui să utilizați numele clasei și operatorul de rezoluție a domeniului (::). O funcție statică poate accesa numai alte funcții statice, membri de date statice și alte funcții din afara clasei. Sfera de aplicare a funcțiilor membre statice se află în clasă și nu pot accesa acest pointer de clasă.
Exemplu 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;
}
ieșire:
Iată o captură de ecran a codului:
Explicația codului:
- Inclusiv fișierul antet iostream în fișierul nostru C++ program pentru a-l folosi funcții.
- Includeți spațiul de nume std în cod pentru a-și folosi clasele fără a-l apela.
- Creați o clasă numită BoxClasă.
- Utilizați modificatorul de acces public pentru a marca un membru al clasei care este accesibil public.
- Declara un membru static al clasei numit count.
- Utilizați un constructor de clasă pentru a inițializa trei variabile de tip dublu.
- Tipăriți ceva text pe consolă. Funcția endl (linia de final) mută cursorul mouse-ului pe linia următoare.
- Inițializați valoarea lui l la lungimea variabilă.
- Inițializați valoarea lui b la lățimea variabilă.
- Inițializați valoarea lui h la înălțimea variabilă.
- Apoi, crește valoarea variabilei cu 1 de fiecare dată când este creat un nou obiect.
- Sfârșitul corpului constructorului.
- Creați o funcție numită doublevolume().
- Definiți ce va returna funcția doubleVolume(). Ar trebui să returneze înmulțirea variabilelor de lungime, lățime și înălțime.
- Sfârșitul corpului funcției doubleVolume().
- Declarați o funcție statică numită getCount().
- Funcția getCount() ar trebui să returneze valoarea variabilei de numărare.
- Sfârșitul corpului funcției getCount().
- Utilizați modificatorul de acces privat pentru a marca un membru al clasei ca fiind accesibil public.
- Declararea unui membru al clasei numit lungimea unui tip de date dublu. Acesta va fi accesibil privat.
- Declarați un alt membru al clasei numit lățimea unui tip de date dublu. Acesta va fi accesibil privat.
- Declararea unui membru al clasei denumit înălțimea tipului de date dublu. Acesta va fi accesibil privat.
- Capătul corpului BoxClasa de clasa.
- Apoi inițializați un membru static al BoxClasa de clasa.
- Apelarea funcției main(). The C++ logica programului ar trebui adăugată în corpul acelei funcții.
- Tipăriți un text pe consolă care indică numărul curent de obiecte înainte de a crea obiecte noi.
- Declarați un obiect numit Box1, care este una dintre instanța clasei BoxClasă. Valorile lățimii, lungimii și înălțimii trebuie specificate în paranteză.
- Declarați un obiect numit Box2, care este o instanță a clasei BoxClasă. Valorile lățimii, lungimii și înălțimii au fost specificate în paranteză.
- Tipăriți un text pe consolă care indică numărul curent de obiecte după crearea de noi obiecte.
- C++ program trebuie să returneze valoarea după finalizarea cu succes.
- Sfârșitul corpului funcției main().
Accesarea funcțiilor statice
Nu trebuie să creați un obiect de clasă pentru a accesa o funcție statică. În schimb, puteți utiliza numele clasei și operatorul de rezoluție a domeniului (::).
Sintaxă:
className::funcName
Mai sus, className este numele clasei în care a fost definită funcția statică. FuncName este numele atribuit funcției statice.
Exemplu 2
#include<iostream>
using namespace std;
class MyClass {
public:
static void msgFunc() {
cout << "Welcome to Guru99!";
}
};
int main() {
MyClass::msgFunc();
}
ieșire:
Iată o captură de ecran a codului:
Explicația codului:
- Includerea fișierului antet iostream în programul nostru pentru a-și folosi funcțiile.
- Includeți spațiul de nume std în codul dvs. pentru a utiliza clasele sale fără a-l apela.
- Creați o clasă numită MyClass.
- Utilizați modificatorul de acces public pentru a marca un membru al clasei ca fiind accesibil public.
- Declararea unei funcții statice numită msgFunc(). Cuvântul cheie static face funcția statică.
- Specificați textul de imprimat pe consolă odată ce funcția de mai sus este apelată/invocată.
- Sfârșitul corpului funcției msgFunc().
- Încheiați corpul clasei.
- Apelarea funcției main().
- Apelați funcția statică numită msgFunc().
- Sfârșitul corpului funcției main().
Accesarea variabilelor statice
Variabilele statice aparțin unei clase mai degrabă decât obiectelor de clasă. Dacă o variabilă statică este publică, este accesibilă utilizând numele clasei și utilizând operatorul de rezoluție a domeniului. Totuși, acest lucru nu este posibil dacă un membru static este privat.
În mod normal, variabilele private sunt accesate folosind funcții publice. Cu toate acestea, trebuie creată o instanță/obiect de clasă. Soluția este să folosiți o funcție statică.
Exemplul 3: variabilă statică în C++ clasă
#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';
}
ieșire:
Iată o captură de ecran a codului:
Explicația codului:
- Includerea fișierului antet iostream în programul nostru.
- Includeți spațiul de nume std în acest program pentru a-și folosi clasele fără apel.
- Creați o clasă numită AClass.
- Utilizați modificatorul de acces privat pentru a face variabila myvar accesibilă în mod privat.
- Creați o variabilă întreagă statică numită myvar.
- Utilizați modificatorul de acces public care marchează funcția getVar() ca fiind accesibilă publicului.
- Crearea unei funcții statice numită getVar().
- Funcția getVar() ar trebui să poată returna valoarea variabilei myvar.
- Sfârșitul corpului funcției getVar().
- Sfârșitul corpului clasei AClass.
- Atribuiți variabilei myvar o valoare de 23. Am folosit numele clasei și operatorul de rezoluție a domeniului pentru aceasta.
- Apelarea funcției main().
- Tipăriți valoarea variabilei myVar pe consolă alături de alt text. Am folosit numele clasei, funcția statică și operatorul de rezoluție a domeniului pentru a accesa valoarea acestei variabile.
- Sfârșitul corpului funcției main().
acest Pointer în Funcții Statice
O funcție statică nu este atașată unui obiect. De aceea funcțiile statice nu au acest indicator. Indicatorul unui obiect indică de obicei obiectul la care lucrează în prezent. Deoarece funcțiile statice nu funcționează cu obiecte, nu este nevoie de acest pointer.
Funcțiile statice au acces direct la alți membri statici. Cu toate acestea, acesta nu este cazul membrilor nestatici. Motivul este că membrii nestatici trebuie să aparțină unui obiect, dar funcțiile statice nu au obiecte cu care să lucreze.
Exemplu 4
Este posibil să definiți o funcție statică în afara declarației de clasă. Să demonstrăm asta:
#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;
}
ieșire:
Iată o captură de ecran a codului dvs.:
Explicația codului:
- Includerea fișierului antet iostream în codul nostru pentru a-i folosi funcțiile.
- Includeți spațiul de nume std în codul nostru pentru a-i folosi clasele fără a-l apela.
- Creați o clasă numită NumGenerator.
- Folosind modificatorul de acces privat pentru a marca variabila, suntem pe cale să creăm ca accesibilă privat.
- Creați o variabilă întreagă statică numită nextNum.
- Folosind modificatorul de acces public care vă ajută să marcați variabila pe care urmează să o creăm ca fiind accesibilă publicului.
- Declararea unei funcții statice numită getNextNum().
- Sfârșitul corpului clasei.
- Atribuiți variabilei nextNum o valoare de 1. Am făcut acest lucru folosind numele clasei, numele variabilei și operatorul de rezoluție a domeniului.
- Definirea funcției statice getNextNum() în afara clasei.
- Specificați acțiunea care trebuie întreprinsă atunci când funcția de mai sus este apelată/invocată. Acesta va crește valoarea variabilei nextNum cu 1.
- Sfârșitul definiției funcției getNextNum().
- Apelarea funcției main(). The C++ logica programului ar trebui adăugată în corpul acestei funcții.
- Folosi pentru bucla pentru a crea o variabilă numită count. Valoarea acestei variabile ar trebui să crească de la 0 la 4. După fiecare iterație, valoarea variabilei va crește cu 1.
- Imprimarea valorii variabilei nextNum alături de alt text pe consolă la fiecare iterație. Valoarea este accesată folosind funcția getNextNum().
- Aceasta C++ programul trebuie să returneze valoarea după finalizarea cu succes.
- Sfârșitul funcției main().
Rezumat
- C++ Membrii statici sunt membrii clasei care aparțin clasei mai degrabă decât obiectelor acesteia.
- Veți avea o singură copie a unui membru static, indiferent de numărul de obiecte pe care le creați.
- Toate obiectele clasei partajează fiecare membru static al clasei.
- După definirea unei funcții de clasă ca fiind statică, aceasta devine independentă de obiectele clasei.
- O funcție statică poate fi accesată chiar dacă nu creați niciun obiect de clasă.
- Cu toate acestea, funcțiile statice nu au acest obiect, care indică obiecte de clasă.






