Статична членска функция в C++ (Примери)
⚡ Умно обобщение
Статични функции-членове в C++ принадлежат на класа, а не на който и да е обект, така че те работят само със статични членове с данни, не изискват извикване на инстанция и не могат да имат достъп до нестатични членове или до указателя this.

Какво е статична функция в C++?
In C++ класове, статичен член е член на класа, който принадлежи към класа, а не към неговите обекти. Ще имате само едно копие на членството. Това е така, независимо от броя на обектите, които създавате.
Когато функция на клас е дефинирана като статична, всички обекти на класа споделят член на статичен клас. Следователно статичната функция може да бъде достъпна без създаване на обекти от клас и става независима от клас обекти. Член на статични данни в C++ има достъп до други статични функции, само извън класа.
Защо да използваме статични функции?
За разлика от C++ глобални функции, статичните функции са достъпни само от файла на декларацията. Ако има нужда да ограничите достъпа до функция, направете я статична.
Използвайте статична функция, за да ограничите повторното използване на същото име на функция в друг файл.
След като обосновката за статичните функции е ясна, следващата стъпка е да видим как са дефинирани в C++ код.
Дефиниране на статични функции в C++
Синтаксис:
static int myfunc(void) { cout("Example of C++ static function "); }
В горния пример дефинираме статична функция с име myfunc. Забележете използването на ключовата дума static в дефиницията. Ключовата дума идва преди името на функцията.
Статична членска функция в 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; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включително заглавния файл на iostream в нашия C++ програма, за да го използвате функции.
- Включете пространството от имена std в кода, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име BoxКлас.
- Използвайте модификатора за публичен достъп, за да маркирате член на класа, който е публично достъпен.
- Декларира член на статичен клас с име count.
- Използвайте конструктор на клас, за да инициализирате три променливи от двоен тип.
- Отпечатайте малко текст на конзолата. Функцията endl (краен ред) премества курсора на мишката в следващия ред.
- Инициализирайте стойността на l до променлива дължина.
- Инициализирайте стойността на b към променлива ширина.
- Инициализирайте стойността на h до променлива височина.
- След това увеличавайте стойността на променливата count с 1 всеки път, когато се създава нов обект.
- Край на тялото на конструктора.
- Създайте функция с име doublevolume().
- Дефинирайте какво ще върне функцията doubleVolume(). Трябва да върне умножението на променливите дължина, ширина и височина.
- Край на тялото на функцията doubleVolume().
- Декларирайте статична функция с име getCount().
- Функцията getCount() трябва да върне стойността на променливата count.
- Край на тялото на функцията getCount().
- Използвайте модификатора за частен достъп, за да маркирате член на класа като публично достъпен.
- Деклариране на член на клас с име length от двоен тип данни. Ще бъде частно достъпен.
- Декларирайте друг член на класа, наречен ширина на двоен тип данни. Ще бъде частно достъпен.
- Деклариране на член на класа с име height от двоен тип данни. Ще бъде частно достъпен.
- Краят на тялото на Boxклас клас.
- След това инициализирайте статичен член на Boxклас клас.
- Извикване на функцията main(). The C++ програмната логика трябва да се добави в тялото на тази функция.
- Отпечатайте текст на конзолата, посочващ текущия брой обекти, преди да бъдат създадени нови обекти.
- Декларирайте обект с име Box1, който е един от екземплярите на класа BoxКлас. Стойностите за ширина, дължина и височина трябва да бъдат посочени в скобите.
- Декларирайте обект с име Box2, който е инстанция на класа BoxКлас. Стойностите за ширина, дължина и височина са посочени в скобите.
- Отпечатайте текст на конзолата, посочващ текущия брой обекти след създаването на нови обекти.
- - 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(); }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашата програма, за да използваме неговите функции.
- Включете пространството от имена std във вашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име MyClass.
- Използвайте модификатора за публичен достъп, за да маркирате член на класа като публично достъпен.
- Деклариране на статична функция с име msgFunc(). Ключовата дума static прави функцията статична.
- Посочете текста, който да се отпечата на конзолата, след като горната функция бъде извикана/извикана.
- Край на тялото на функцията msgFunc().
- Завършете тялото на класа.
- Извикване на функцията main().
- Извикайте статичната функция с име msgFunc().
- Край на тялото на функцията main().
Достъп до статични променливи
Статичните променливи принадлежат към клас, а не към обекти от клас. Ако статичната променлива е публична, тя е достъпна с помощта на името на класа и с помощта на оператора за разрешаване на обхват. Това обаче не е възможно, ако статичен член е частен.
Обикновено частните променливи се осъществяват чрез публични функции. Трябва обаче да се създаде екземпляр/обект на клас. Решението е да се използва статична функция.
Пример 3: Статична променлива в 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'; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашата програма.
- Включете пространството от имена std в тази програма, за да използвате нейните класове без извикване.
- Създайте клас с име AClass.
- Използвайте модификатора за частен достъп, за да направите променливата myvar частно достъпна.
- Създайте статична целочислена променлива с име myvar.
- Използвайте модификатора за публичен достъп, който маркира функцията getVar() като публично достъпна.
- Създаване на статична функция с име getVar().
- Функцията getVar() трябва да може да върне стойността на променливата myvar.
- Край на тялото на функцията getVar().
- Край на тялото на класа AClass.
- Присвоете на променливата myvar стойност 23. За това сме използвали името на класа и оператора за разрешаване на обхвата.
- Извикване на функцията main().
- Отпечатайте стойността на променливата myVar на конзолата заедно с друг текст. Използвахме името на класа, статичната функция и оператора за разрешаване на обхвата за достъп до стойността на тази променлива.
- Краят на тялото на функцията main().
Едно ключово ограничение обяснява защо статичните функции се държат различно от обикновените методи, а именно липсата на указателя this.
този указател в статични функции
Статичната функция не е прикрепена към обект. Ето защо статичните функции нямат този указател. Указателят на обект обикновено сочи към обекта, върху който работи в момента. Тъй като статичните функции не работят с обекти, няма нужда от този указател.
Статичните функции имат директен достъп до други статични членове. Това обаче не е случаят с нестатичните членове. Причината е, че нестатичните членове трябва да принадлежат към обект, но статичните функции нямат обекти, с които да работят.
Пример 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; }
Изход:
Ето екранна снимка на вашия код:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код, за да използваме неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име NumGenerator.
- Използвайки модификатора за частен достъп, за да маркираме променливата, която ще създадем като частно достъпна.
- Създайте статична цяло число променлива с име nextNum.
- Използване на модификатора за публичен достъп, който ви помага да маркирате променливата, която ще създадем, като публично достъпна.
- Деклариране на статична функция с име getNextNum().
- Край на тялото на класа.
- Присвоете на променливата nextNum стойност 1. Направихме това, използвайки името на класа, името на променливата и оператора за разрешаване на обхвата.
- Дефиниране на статичната функция getNextNum() извън класа.
- Посочете действието, което да се предприеме, когато горната функция бъде извикана/извикана. Той ще увеличи стойността на променливата nextNum с 1.
- Край на дефиницията на функцията getNextNum().
- Извикване на функцията main(). The C++ програмната логика трябва да се добави в тялото на тази функция.
- Употреба за цикъл за да създадете променлива с име count. Стойността на тази променлива трябва да нараства от 0 до 4. След всяка итерация стойността на променливата ще се увеличава с 1.
- Отпечатване на стойността на променливата nextNum заедно с друг текст на конзолата при всяка итерация. Достъпът до стойността се осъществява чрез функцията getNextNum().
- Това C++ програмата трябва да върне стойност при успешно завършване.
- Край на функцията main().






