Статична членска функция в C++ (Примери)
Какво е статична функция в C++?
In 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;
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включително заглавния файл на 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();
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включване на заглавния файл на 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';
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включване на заглавния файл на 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(). The C++ програмната логика трябва да се добави в тялото на тази функция.
- Употреба за цикъл за да създадете променлива с име count. Стойността на тази променлива трябва да нараства от 0 до 4. След всяка итерация стойността на променливата ще се увеличава с 1.
- Отпечатване на стойността на променливата nextNum заедно с друг текст на конзолата при всяка итерация. Достъпът до стойността се осъществява чрез функцията getNextNum().
- Това C++ програмата трябва да върне стойност при успешно завършване.
- Край на функцията main().
Oбобщение
- C++ статичните членове са членове на класа, които принадлежат към класа, а не към неговите обекти.
- Ще имате само едно копие на статичен член, независимо от броя на обектите, които създавате.
- Всички обекти на клас споделят всеки член на статичен клас.
- След дефиниране на функция на клас като статична, тя става независима от обектите на класа.
- Може да се осъществи достъп до статична функция, дори ако не създавате обект на клас.
- Статичните функции обаче нямат този обект, който сочи към обекти на клас.






