Статична функція-член в 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. Використовуйте конструктор класу для ініціалізації трьох змінних типу double.
  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 типу даних double. Воно буде приватним доступом.
  21. Оголошіть інший член класу під назвою ширина типу даних double. Воно буде в приватному доступі.
  22. Оголошення члена класу з іменем height типу даних double. Воно буде в приватному доступі.
  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().

Підсумки

  • C++ статичні члени — це члени класу, які належать класу, а не його об’єктам.
  • Ви матимете лише одну копію статичного елемента незалежно від кількості створених об’єктів.
  • Усі об’єкти класу спільно використовують кожного статичного члена класу.
  • Після визначення функції класу як статичної вона стає незалежною від об’єктів класу.
  • До статичної функції можна отримати доступ, навіть якщо ви не створюєте жодного об’єкта класу.
  • Однак статичні функції не мають цього об’єкта, який вказує на об’єкти класу.

Підсумуйте цей пост за допомогою: