Статична членска функция в 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;
}

Изход:

Статична членска функция

Ето екранна снимка на кода:

Статична членска функция

Обяснение на кода:

  1. Включително заглавния файл на iostream в нашия C++ програма, за да го използвате функции.
  2. Включете пространството от имена std в кода, за да използвате неговите класове, без да го извиквате.
  3. Създайте клас с име BoxКлас.
  4. Използвайте модификатора за публичен достъп, за да маркирате член на класа, който е публично достъпен.
  5. Декларира член на статичен клас с име count.
  6. Използвайте конструктор на клас, за да инициализирате три променливи от двоен тип.
  7. Отпечатайте малко текст на конзолата. Функцията endl (краен ред) премества курсора на мишката в следващия ред.
  8. Инициализирайте стойността на l до променлива дължина.
  9. Инициализирайте стойността на b към променлива ширина.
  10. Инициализирайте стойността на h до променлива височина.
  11. След това увеличавайте стойността на променливата count с 1 всеки път, когато се създава нов обект.
  12. Край на тялото на конструктора.
  13. Създайте функция с име doublevolume().
  14. Дефинирайте какво ще върне функцията doubleVolume(). Трябва да върне умножението на променливите дължина, ширина и височина.
  15. Край на тялото на функцията doubleVolume().
  16. Декларирайте статична функция с име getCount().
  17. Функцията getCount() трябва да върне стойността на променливата count.
  18. Край на тялото на функцията getCount().
  19. Използвайте модификатора за частен достъп, за да маркирате член на класа като публично достъпен.
  20. Деклариране на член на клас с име length от двоен тип данни. Ще бъде частно достъпен.
  21. Декларирайте друг член на класа, наречен ширина на двоен тип данни. Ще бъде частно достъпен.
  22. Деклариране на член на класа с име height от двоен тип данни. Ще бъде частно достъпен.
  23. Краят на тялото на Boxклас клас.
  24. След това инициализирайте статичен член на Boxклас клас.
  25. Извикване на функцията main(). The C++ програмната логика трябва да се добави в тялото на тази функция.
  26. Отпечатайте текст на конзолата, посочващ текущия брой обекти, преди да бъдат създадени нови обекти.
  27. Декларирайте обект с име Box1, който е един от екземплярите на класа BoxКлас. Стойностите за ширина, дължина и височина трябва да бъдат посочени в скобите.
  28. Декларирайте обект с име Box2, който е инстанция на класа BoxКлас. Стойностите за ширина, дължина и височина са посочени в скобите.
  29. Отпечатайте текст на конзолата, посочващ текущия брой обекти след създаването на нови обекти.
  30. - C++ програма трябва да върне стойност при успешно завършване.
  31. Край на тялото на функцията 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();
}

Изход:

Достъп до статични функции

Ето екранна снимка на кода:

Достъп до статични функции

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашата програма, за да използваме неговите функции.
  2. Включете пространството от имена std във вашия код, за да използвате неговите класове, без да го извиквате.
  3. Създайте клас с име MyClass.
  4. Използвайте модификатора за публичен достъп, за да маркирате член на класа като публично достъпен.
  5. Деклариране на статична функция с име msgFunc(). Ключовата дума static прави функцията статична.
  6. Посочете текста, който да се отпечата на конзолата, след като горната функция бъде извикана/извикана.
  7. Край на тялото на функцията msgFunc().
  8. Завършете тялото на класа.
  9. Извикване на функцията main().
  10. Извикайте статичната функция с име msgFunc().
  11. Край на тялото на функцията 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';
}

Изход:

Достъп до статични променливи

Ето екранна снимка на кода:

Достъп до статични променливи

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашата програма.
  2. Включете пространството от имена std в тази програма, за да използвате нейните класове без извикване.
  3. Създайте клас с име AClass.
  4. Използвайте модификатора за частен достъп, за да направите променливата myvar частно достъпна.
  5. Създайте статична целочислена променлива с име myvar.
  6. Използвайте модификатора за публичен достъп, който маркира функцията getVar() като публично достъпна.
  7. Създаване на статична функция с име getVar().
  8. Функцията getVar() трябва да може да върне стойността на променливата myvar.
  9. Край на тялото на функцията getVar().
  10. Край на тялото на класа AClass.
  11. Присвоете на променливата myvar стойност 23. За това сме използвали името на класа и оператора за разрешаване на обхвата.
  12. Извикване на функцията main().
  13. Отпечатайте стойността на променливата myVar на конзолата заедно с друг текст. Използвахме името на класа, статичната функция и оператора за разрешаване на обхвата за достъп до стойността на тази променлива.
  14. Краят на тялото на функцията 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;
}

Изход:

този указател в статични функции

Ето екранна снимка на вашия код:

този указател в статични функции

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код, за да използваме неговите функции.
  2. Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
  3. Създайте клас с име NumGenerator.
  4. Използвайки модификатора за частен достъп, за да маркираме променливата, която ще създадем като частно достъпна.
  5. Създайте статична цяло число променлива с име nextNum.
  6. Използване на модификатора за публичен достъп, който ви помага да маркирате променливата, която ще създадем, като публично достъпна.
  7. Деклариране на статична функция с име getNextNum().
  8. Край на тялото на класа.
  9. Присвоете на променливата nextNum стойност 1. Направихме това, използвайки името на класа, името на променливата и оператора за разрешаване на обхвата.
  10. Дефиниране на статичната функция getNextNum() извън класа.
  11. Посочете действието, което да се предприеме, когато горната функция бъде извикана/извикана. Той ще увеличи стойността на променливата nextNum с 1.
  12. Край на дефиницията на функцията getNextNum().
  13. Извикване на функцията main(). The C++ програмната логика трябва да се добави в тялото на тази функция.
  14. Употреба за цикъл за да създадете променлива с име count. Стойността на тази променлива трябва да нараства от 0 до 4. След всяка итерация стойността на променливата ще се увеличава с 1.
  15. Отпечатване на стойността на променливата nextNum заедно с друг текст на конзолата при всяка итерация. Достъпът до стойността се осъществява чрез функцията getNextNum().
  16. Това C++ програмата трябва да върне стойност при успешно завършване.
  17. Край на функцията main().

Oбобщение

  • C++ статичните членове са членове на класа, които принадлежат към класа, а не към неговите обекти.
  • Ще имате само едно копие на статичен член, независимо от броя на обектите, които създавате.
  • Всички обекти на клас споделят всеки член на статичен клас.
  • След дефиниране на функция на клас като статична, тя става независима от обектите на класа.
  • Може да се осъществи достъп до статична функция, дори ако не създавате обект на клас.
  • Статичните функции обаче нямат този обект, който сочи към обекти на клас.

Обобщете тази публикация с: