Statyczna funkcja członu w C++ (Przykłady)
Czym jest funkcja statyczna w C++?
In C++ klas, element statyczny jest członkiem klasy, który należy do klasy, a nie do jej obiektów. Będziesz mieć tylko jedną kopię członkostwa. Dzieje się tak niezależnie od liczby tworzonych obiektów.
Gdy funkcja klasy jest zdefiniowana jako statyczna, wszystkie obiekty klasy współdzielą statycznego członka klasy. Dostęp do funkcji statycznej można zatem uzyskać bez tworzenia obiektów klasy i staje się ona niezależna od obiekty klasowe. Statyczny element danych w C++ może uzyskać dostęp do innych funkcji statycznych, tylko poza klasą.
Dlaczego warto używać funkcji statycznych?
w odróżnieniu C++ funkcje globalne, funkcje statyczne są dostępne tylko z pliku deklaracji. Jeśli istnieje potrzeba ograniczenia dostępu do funkcji, uczyń ją statyczną.
Użyj funkcji statycznej, aby ograniczyć ponowne użycie tej samej nazwy funkcji w innym pliku.
Definiowanie funkcji statycznych w C++
Składnia:
static int myfunc(void) { cout("Example of C++ static function "); }
W powyższym przykładzie definiujemy funkcję statyczną o nazwie myfunc. Zwróć uwagę na użycie słowa kluczowego static w definicji. Słowo kluczowe występuje przed nazwą funkcji.
Statyczna funkcja członu w C++
Kiedy element funkcji zostanie zadeklarowany jako statyczny, staje się niezależny od innych obiektów w klasie. Możesz wywołać statyczną funkcję członkowską, nawet jeśli nie istnieją żadne inne obiekty klasy.
Aby uzyskać dostęp do nazw klas, należy użyć nazwy klasy i operatora rozwiązywania zakresu (::)
. Funkcja statyczna może uzyskać dostęp tylko do innych funkcji statycznych, statycznych składowych danych i innych funkcji spoza klasy. Zakres statycznych funkcji członkowskich leży w klasie i nie mają one dostępu do wskaźnika tej klasy.
1 przykład
#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; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego C++ program, aby z niego skorzystać Funkcje.
- Dołącz przestrzeń nazw std do kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie BoxKlasa.
- Użyj modyfikatora dostępu publicznego, aby oznaczyć członka klasy, który jest publicznie dostępny.
- Deklaracja członka klasy statycznej o nazwie count.
- Użyj konstruktora klasy do zainicjowania trzech zmiennych typu double.
- Wydrukuj tekst na konsoli. Funkcja endl (koniec linii) przesuwa kursor myszy do następnej linii.
- Zainicjuj wartość l do zmiennej długości.
- Zainicjuj wartość b do zmiennej szerokości.
- Zainicjuj wartość h do zmiennej wysokości.
- Następnie zwiększaj wartość licznika zmiennych o 1 za każdym razem, gdy tworzony jest nowy obiekt.
- Koniec ciała konstruktora.
- Utwórz funkcję o nazwie doublevolume().
- Zdefiniuj, co funkcja doubleVolume() zwróci. Powinna zwrócić iloczyn zmiennych length, width i height.
- Koniec treści funkcji doubleVolume().
- Zadeklaruj funkcję statyczną o nazwie getCount().
- Funkcja getCount() powinna zwrócić wartość zmiennej count.
- Koniec treści funkcji getCount().
- Użyj modyfikatora dostępu prywatnego, aby oznaczyć członka klasy jako publicznie dostępnego.
- Deklarowanie członka klasy o nazwie length typu danych double. Będzie on dostępny prywatnie.
- Zadeklaruj innego członka klasy o nazwie width typu danych double. Będzie on dostępny prywatnie.
- Deklarowanie członka klasy o nazwie height typu danych double. Będzie on dostępny prywatnie.
- Koniec korpusu BoxKlasa klasowa.
- Następnie zainicjuj statyczny element członkowski BoxKlasa klasowa.
- Wywołanie funkcji main(). The C++ logikę programu należy dodać w treści tej funkcji.
- Wydrukuj na konsoli tekst informujący o bieżącej liczbie obiektów przed utworzeniem nowych obiektów.
- Zadeklaruj obiekt o nazwie Box1, który jest jedną z instancji klasy BoxKlasa. Wartości szerokości, długości i wysokości należy podać w nawiasie.
- Zadeklaruj obiekt o nazwie Box2, który jest instancją klasy BoxKlasa. Wartości szerokości, długości i wysokości podano w nawiasach.
- Wydrukuj na konsoli tekst informujący o aktualnej liczbie obiektów po utworzeniu nowych obiektów.
- Kurs C++ program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main().
Dostęp do funkcji statycznych
Nie musisz tworzyć obiektu klasy, aby uzyskać dostęp do funkcji statycznej. Zamiast tego możesz użyć operatora rozwiązania nazwy klasy i zakresu (::)
.
Składnia:
className::funcName
Powyżej nazwaklasy jest nazwą klasy, w której zdefiniowano funkcję statyczną. funcName to nazwa przypisana do funkcji statycznej.
2 przykład
#include<iostream> using namespace std; class MyClass { public: static void msgFunc() { cout << "Welcome to Guru99!"; } }; int main() { MyClass::msgFunc(); }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego programu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do swojego kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie MyClass.
- Użyj modyfikatora dostępu publicznego, aby oznaczyć członka klasy jako publicznie dostępnego.
- Deklarowanie funkcji statycznej o nazwie msgFunc(). Słowo kluczowe static sprawia, że funkcja jest statyczna.
- Określ tekst, który ma zostać wydrukowany na konsoli po wywołaniu/wywołaniu powyższej funkcji.
- Koniec treści funkcji msgFunc().
- Zakończ treść zajęć.
- Wywołanie funkcji main().
- Wywołaj funkcję statyczną o nazwie msgFunc().
- Koniec treści funkcji main().
Dostęp do zmiennych statycznych
Zmienne statyczne należą do klasy, a nie do obiektów klasowych. Jeśli zmienna statyczna jest publiczna, jest dostępna za pomocą nazwy klasy i operatora rozdzielczości zakresu. Nie jest to jednak możliwe, jeśli element statyczny jest prywatny.
Zwykle dostęp do zmiennych prywatnych uzyskuje się za pomocą funkcji publicznych. Należy jednak utworzyć instancję/obiekt klasy. Rozwiązaniem jest użycie funkcji statycznej.
Przykład 3: Zmienna statyczna in C++ klasa
#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'; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego programu.
- Dołącz przestrzeń nazw std do tego programu, aby używać jej klas bez wywoływania.
- Utwórz klasę o nazwie AClass.
- Użyj modyfikatora dostępu prywatnego, aby zmienna myvar była dostępna prywatnie.
- Utwórz statyczną zmienną całkowitą o nazwie myvar.
- Użyj modyfikatora dostępu publicznego, który oznacza funkcję getVar() jako publicznie dostępną.
- Tworzenie funkcji statycznej o nazwie getVar().
- Funkcja getVar() powinna zwrócić wartość zmiennej myvar.
- Koniec treści funkcji getVar().
- Koniec treści klasy AClass.
- Przypisz zmiennej myvar wartość 23. W tym celu użyliśmy operatora rozwiązywania nazwy klasy i zakresu.
- Wywołanie funkcji main().
- Wydrukuj wartość zmiennej myVar na konsoli obok innego tekstu. Użyliśmy nazwy klasy, funkcji statycznej i operatora rozdzielczości zakresu, aby uzyskać dostęp do wartości tej zmiennej.
- Koniec treści funkcji main().
ten wskaźnik w funkcjach statycznych
Funkcja statyczna nie jest powiązana z obiektem. Dlatego funkcje statyczne nie mają tego wskaźnika. Wskaźnik obiektu zwykle wskazuje obiekt, nad którym aktualnie pracuje. Ponieważ funkcje statyczne nie działają z obiektami, nie ma potrzeby stosowania tego wskaźnika.
Funkcje statyczne mają bezpośredni dostęp do innych statycznych elementów członkowskich. Nie dotyczy to jednak elementów niestatycznych. Powodem jest to, że niestatyczne elementy członkowskie muszą należeć do obiektu, ale funkcje statyczne nie mają obiektów, z którymi można pracować.
4 przykład
Możliwe jest zdefiniowanie funkcji statycznej poza deklaracją klasy. Zademonstrujmy to:
#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; }
Wyjście:
Oto zrzut ekranu Twojego kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie NumGenerator.
- Używając modyfikatora dostępu prywatnego do oznaczenia zmiennej, zaraz utworzymy ją jako dostępną prywatnie.
- Utwórz statyczną zmienną całkowitą o nazwie nextNum.
- Użycie modyfikatora dostępu publicznego, który pomaga oznaczyć zmienną, którą za chwilę utworzymy, jako publicznie dostępną.
- Deklarowanie funkcji statycznej o nazwie getNextNum().
- Koniec treści zajęć.
- Przypisz zmiennej nextNum wartość 1. Dokonaliśmy tego za pomocą nazwy klasy, nazwy zmiennej i operatora rozwiązywania zakresu.
- Definiowanie funkcji statycznej getNextNum() poza klasą.
- Określ akcję, która ma zostać wykonana po wywołaniu/wywołaniu powyższej funkcji. Zwiększy wartość zmiennej nextNum o 1.
- Koniec definicji funkcji getNextNum().
- Wywołanie funkcji main(). The C++ logikę programu należy dodać w treści tej funkcji.
- Użyj dla pętli aby utworzyć zmienną o nazwie count. Wartość tej zmiennej powinna zwiększać się od 0 do 4. Po każdej iteracji wartość zmiennej będzie wzrastać o 1.
- Drukowanie wartości zmiennej nextNum wraz z innym tekstem na konsoli przy każdej iteracji. Dostęp do wartości uzyskuje się za pomocą funkcji getNextNum().
- To zdjęcie C++ program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec funkcji main().
Podsumowanie
- C++ Elementy statyczne to elementy klasy należące do klasy, a nie do jej obiektów.
- Będziesz mieć tylko jedną kopię statycznego elementu członkowskiego, niezależnie od liczby utworzonych obiektów.
- Wszystkie obiekty klas współdzielą każdego członka klasy statycznej.
- Po zdefiniowaniu funkcji klasy jako statycznej staje się ona niezależna od obiektów klasy.
- Dostęp do funkcji statycznej można uzyskać nawet wtedy, gdy nie utworzysz żadnego obiektu klasy.
- Jednak funkcje statyczne nie mają tego obiektu, który wskazuje na obiekty klas.