Статическая функция-член в 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.
- Используйте конструктор класса для инициализации трех переменных типа double.
- Напечатайте текст на консоли. Функция endl (конец строки) перемещает курсор мыши на следующую строку.
- Инициализируйте значение l переменной длины.
- Инициализируйте значение b переменной ширины.
- Инициализируйте значение h переменной высотой.
- Затем увеличивайте значение переменной count на 1 каждый раз, когда создается новый объект.
- Конец тела конструктора.
- Создайте функцию с именем doublevolume().
- Определите, что будет возвращать функция doubleVolume(). Он должен возвращать произведение переменных длины, ширины и высоты.
- Конец тела функции doubleVolume().
- Объявите статическую функцию с именем getCount().
- Функция getCount() должна возвращать значение переменной count.
- Конец тела функции getCount().
- Используйте модификатор частного доступа, чтобы пометить члена класса как общедоступного.
- Объявление члена класса с именем length типа данных double. Доступ будет в частном порядке.
- Объявите еще один член класса с именем width типа данных double. Доступ будет в частном порядке.
- Объявление члена класса с именем height типа данных double. Доступ будет в частном порядке.
- Конец тела BoxКласс класс.
- Затем инициализируйте статический член BoxКласс класс.
- Вызов функции main(). 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(). C++ Программную логику следует добавлять в тело этой функции.
- Использовать для цикла чтобы создать переменную с именем count. Значение этой переменной должно увеличиваться от 0 до 4. После каждой итерации значение переменной будет увеличиваться на 1.
- Печать значения переменной nextNum вместе с другим текстом на консоли на каждой итерации. Доступ к значению осуществляется с помощью функции getNextNum().
- Эти C++ программа должна вернуть значение после успешного завершения.
- Конец функции main().
Резюме
- C++ статические члены — это члены класса, которые принадлежат классу, а не его объектам.
- У вас будет только одна копия статического члена независимо от количества создаваемых вами объектов.
- Все объекты класса совместно используют каждого статического члена класса.
- После определения функции класса как статической она становится независимой от объектов класса.
- Доступ к статической функции возможен, даже если вы не создаете какой-либо объект класса.
- Однако статические функции не имеют этого объекта, который указывает на объекты класса.






