Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать

Int Fun10 const; // const-функція-член

};

Як бачите, модифікатор const розташовується після оголошення переліку па­раметрів функції.

Мета оголошення функції як const-члена класу - не допустити модифікацію об'єкта, який її викликає. Для розуміння сказаного розглянемо наведену нижче програму.

Код програми 11.10. Демонстрація механізму використання const-функцій- членів класу // Ця програма не відкомпілюється.

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

class Demo { int с; public:

Int PutO const; return c; // Все гаразд

}

void Set(int x) const {

c = x; // Помилка!

};

Int mainO

{

Demo Obj;

0Bj.Set(1900); cout « Obj.PutO;

getchO; return 0;

}

Ця програма не відкомпілюється, оскільки функцію Set() оголошено як const- член. Це означає, що їй не дозволено модифікувати той об'єкт, який її викликає. Її спроба змінити вміст змінної с призводить до виникнення помилки. На відміну від функції SetO, функція PutO не намагається модифікувати змінну с, і тому вона абсо­лютно прийнятна.

Можливі ситуації, коли потрібно, щоб const-функція могла змінити один або декілька членів класу, але ніяк не могла вплинути на інші. Це можна реалізувати за допомогою модифікатора mutable, який перевизначає атрибут функції const. Ін­шими словами, mutable-член може бути модифікований const-функцією-членом. Розглянемо такий приклад.

Код програми 11.11. Демонстрація механізму використання модифікатора mutable

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

class Demo {

mutable int c; int d;

public:

int PutO const {return c;} // Все гаразд void Set(int х) const {

c = х; // тепер все гаразд

};

Void setJ(int х) const // Наступна функція не відкомпілюється.

{

d = х; // Це, як і раніше, неправильно!

};

}

int mainO

{

Demo Obj;

0bj.Set(1900); cout « Obj.PutO;

getchO; return 0;

}

У цьому коді програми закритий член-даних с визначено з використанням модифікатора mutable, тому його можна змінити за допомогою функції Set(). Проте змінна d не є mutable-членом, тому функції SetO не дозволяється модифікувати йо­го значення.

  1. Використання explicit-конструкторів

У мові програмування C++ визначено ключове слово explicit, яке застосо­вується для оброблення спеціальних ситуацій, наприклад, при використанні конс­трукторів певних типів. Щоби зрозуміти призначення специфікатора explicit, спо­чатку розглянемо наведену нижче програму.

Код програми 11.12. Демонстрація механізму використання специфікатора explicit #include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

class myClass { // Оголошення класового типу

Int а; public:

myClass(int х) {а = х;} int Put() {return а;}

};