Пример 10. class Coord // базовый класс координат
class Coord // базовый класс координат
{
int x, y;
public:
Coord (int Y, int Y) { x = X; y = Y;}
void SetVal (int X, int Y) { x = X; y = Y;}
void GetVal (double & X, double & Y) const; // константная функция
};
Coord:: GetVal (double & X, double & Y) const
{
X = x; Y = y;
}
int main ()
{
Coord p (3, 8);
const Coord p 1(6, 9); // константный объект
int a, b;
p. GetVal (a, b);
p 1. SetVal (a, b); // Ошибка!!! Вызов неконстантной функции-члена
p 1. GetVal (a, b);
}
Чтобы обойти указанные ограничения на использование константных функций-членов класса, в стандарт языка С++ было введено новое ключевое слово mutable. Это ключевое слово позволяет указать, какие данные-члены класса могут быть модифицированы константными функциями-членами. Ключевое слово mutable нельзя использовать для статических и константных членов-данных; оно используется как модификатор типа, то есть синтаксис его использования имеет вид:
mutable <тип_данных> <имя_переменной-члена>;
Пример 11.
class AnyClass
{
mutable int count;
mutable const int * iptr;
public:
int func (int i =0) const
{
count = i ++;
iptr =& i;
cout << iptr;
return count;
}
};
Здесь в операторе mutable const int * iptr; модификатор mutable допустим, так как iptr является указателем на целое число, которое есть константа, хотя сам указатель константой не является.
Дата добавления: 2015-09-27 | Просмотры: 376 | Нарушение авторских прав
|