static члены и методы класса

На этом уроке рассмотрим использование static членов и static методов класса.

Если вам нужно, чтобы переменная-член существовала только в одном экземпляре, ее нужно сделать статической. Грубо говоря, это глобальная переменная в пределах класса. Рассмотрим пример.

#include <iostream>
using namespace std;

class Test
{
public:
	void setValue(int val)
	{
		t = val;
	}

	int getValue()
	{
		return t;
	}

private:
	static int t;
};

int Test::t;

void main()
{	
	Test test1;
	test1.setValue(99);
	cout<<test1.getValue()<<endl;

	Test test2;
	cout<<test2.getValue()<<endl;

	Test test3;
	cout<<test3.getValue()<<endl;
}

Сначала мы создаем private переменную t, которая является статической. Но этого недостаточно, чтобы для нее выделилась память. Поэтому, мы ее определяем еще раз вне класса. Теперь в функции main() мы создаем объект test1 и с помощью метода setValue() задаем начальное значение для нашей переменной. Далее мы создали еще два объекта, вызвали метод getValue() и убедились, что все три объекта работают с одной и той же переменной.

Теперь поговорим о static методах. Статические методы можно вызывать без создания объекта. Они не имеют указателя this, а также могут иметь доступ только к статическим членам класса. Рассмотрим пример.

#include <iostream>
using namespace std;

class Math
{
public:
	static double getAvg(int num1, int num2)
	{
		return static_cast<double>(num1 + num2) / 2;
	}
};


void main()
{		
	cout<<Math::getAvg(7, 6)<<endl;
}

В классе Math есть static метод getAvg(), который возвращает среднее арифметическое двух чисел. В функции main() мы вызываем этот метод и передаем туда в качестве аргументов числа 7 и 6. Обратите внимание, что перед методом мы должны указать его принадлежность к классу Math.

Комментарии и пинги к записи запрещены.

Комментарии закрыты.

Яндекс.Метрика