Константні функції-члени. Функції-члени volatile

Константні функції-члени. Функції-члени 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, що містить константну функцію GetX(), яка повертає константне значення типу double.

// клас, що містить оголошення константної функції
class CMyClass
{
    double x; // внутрішня змінна

    public:
    CMyClass(void); // конструктор

    void SetX(double nx);
    const double GetX(void); // константна функція-член класу
};

Використання константної функції в деякому програмному коді:

// використання константної функції
CMyClass MC;

MC.SetX(25.08); // встановлення значення x

// використання константної функції GetX() класу CMyClass
double t1 = MC.GetX(); // t1 = 25.08 - ініціалізація змінної
const double t2 = MC.GetX(); // 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-значення типу double.

// клас, що містить 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-змінними.


Зв’язані теми