Константные функции-члены. Функции-члены volatile
Содержание
- 1. Какие функции называются константными функциями-членами класса?
- 2. Пример объявления класса, содержащего константные (const) функции-члены
- 3. Какой общий вид функции-члена класса, возвращающей объект типа volatile?
- 4. Пример объявления класса, содержащего функции-члены volatile
- Связанные темы
Поиск на других ресурсах:
1. Какие функции называются константными функциями-членами класса?
Функции, которые возвращают константный объект называются константными функциями. Если такие функции объявлены в классе, то эти функции называются константными функциями-членами класса.
Чтобы объявить функцию, возвращающую константный объект, нужно перед объявлением функции разместить ключевое слово ‘const’
const returned_type FunName(parameters) { // function's body // ... }
где
- returned_type – тип, возвращаемый функцией;
- parameters – параметры функции;
- FunName – имя функции, возвращающей константный объект (константной функции).
Если функция объявлена в классе, то ее объявление будет иметь приблизительно следующий вид:
class CMyClass { private: // приватные члены и методы класса // ... public: // общедоступные члены и методы класса // ... // объявление константной функции в классе const returned_type FunName(parameters); } // реализация функции FunName const returned_type CMyClass::FunName(parameters) { // тело функции FunName() // ... }
2. Пример объявления класса, содержащего константные (const) функции-члены
В примере объявляется класс CMyClass, содержащий константную функцию Get(), возвращающую константное значение типа double.
// класс, который содержит объявления константной функции class CMyClass { double x; // внутренняя переменная public: CMyClass(void); // конструктор void Set(double nx); const double Get(void); // константная функция-член класса };
Использование константной функции из другого программного кода:
// использование константной функции CMyClass MC; MC.Set(25.08); // установление значения x // использование константной функции Get() класса CMyClass double t1 = MC.Get(); // t1 = 25.08 - инициализация переменной const double t2 = MC.Get(); // t2 = 25.08 - инициализация константы
3. Какой общий вид функции-члена класса, возвращающей объект типа volatile?
Объект, объявленный со спецификатором volatile может быть изменен в программе неявно – без применения явным образом заданных команд. Ключевое слово volatile информирует компилятор, что значение переменной в программе может быть изменено неявно (программой обработки прерываний, фоновым процессом, и т.п.). Зная о такой изменчивости переменной в программе (ключевое слово volatile), компилятор сформирует код, который будет опрашивать значение переменной перед каждым ее использованием в программе. Таким образом, будет получено реальное (измененное) значение переменной (а не то, что было до изменения).
Например. Пусть в некоторой программе P реализована глобальная переменная X, содержащая адрес, который может быть изменен программой-обработчиком прерывания. Программа-обработчик прерывания будет вызываться независимо от выполнения данной программы P и соответствующим образом изменяет значение этой глобальной переменной X. Если в программе P не указать ключевого слова volatile перед X, то, при считывании значения X в программе P может отображаться старое значение X. Если указать слово volatile, то компилятор будет обновлять значения переменной X при каждом обращении к ней, и, искажения результата не произойдет.
Функции-члены, которые объявлены со спецификатором volatile просто возвращают непостоянный (volatile) объект. Такой объект может быть присвоен переменной, которая объявлена со спецификатором volatile.
Общий вид класса, содержащего функцию, которая возвращает volatile-значение
class CMyClass { private: // приватные члены и методы класса // ... public: // общедоступные члены и методы класса // ... // объявление константной функции в классе volatile returned_type FunName(parameters); } // реализация функции FunName volatile returned_type CMyClass::FunName(parameters) { // тело функции FunName() // ... }
где
- returned_type – тип, который возвращается функцией;
- parameters – параметры функции;
- FunName – имя функции, которая возвращает volatile-объект.
4. Пример объявления класса, содержащего функции-члены volatile
В классе CMyVolatileClass объявлена функция Get(), которая возвращает volatile-значение типа int.
// класс, который содержит volatile-функцию class CMyVolatileClass { int d; public: CMyVolatileClass(void); // функции-члены класса // обычная функция-член класса void Set(int nd) { d = nd; } // функция-член класса, возвращающая volatile-значение volatile int Get(void); };
Демонстрация использования класса в некотором методе или программном коде:
// класс, содержащий volatile-функцию CMyVolatileClass VC; VC.Set(33); // вызов обычной функции // вызов volatile-функции для обычной переменной int t1 = VC.Get(); // t1 = 33 volatile int t2; // вызов volatile-функции для volatile-переменной t2 = VC.Get(); // t2 = 33
Как видно из вышеприведенного кода, volatile-функции можно использовать в сочетании с обычными и volatile-переменными.
Связанные темы
- Виды функций-членов класса. Обычные функции-члены. Статические (static) функции-члены класса. Примеры использования
- Функции класса, объявленные с константным (const) указателем this и непостоянным (volatile) указателем this
- Inline функции-члены класса. Ключевое слово inline