Константные методы

Константный метод — это метод, в котором невозможна модификация полей класса. При попытке изменения поля в константном методе, мы получим ошибку компиляции. Например, имеет смысл делать константными get методы. Рассмотрим пример.

#include <iostream>
using namespace std;

class Test
{
public:

	Test()
	{
		t = 0;		
	}

	void setValue(int val)
	{
		t = val;		
	}

	int getValue() const
	{
		return t;
	}
	
private:
	int t;	
};


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

В классе Test есть поле t, а также методы setValue() и getValue(). Мы сделали метод getValue() константным, так как основное его назначение — вернуть значение поля t.

Ключевое слово mutable.

Если у нас ситуация, когда все-таки нужно изменить одно из полей в константном методе, то такое поле делают mutable, т.е. изменяемым. Рассмотрим пример.

#include <iostream>
using namespace std;

class Test
{
public:

	Test()
	{
		t = 0;
		cnt = 0;
	}

	void setValue(int val)
	{
		t = val;		
	}

	int getValue() const
	{		
		cnt++;

		return t;
	}

	void debug()
	{
		cout<<"cnt = "<<cnt<<endl;
	}


private:
	int t;
	mutable int cnt;
};


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

	test.debug();
}

У нас есть поле cnt, которое представляет собой счетчик. В методе getValue() мы увеличиваем наш счетчик на единицу. Таким образом, в поле cnt содержится количество вызовов метода getValue(). Метод debug() выводит значение нашего счетчика.

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

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

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