Урок №148. Перевантаження операцій конвертації типів даних

  Юрій  | 

  Оновл. 17 Лют 2021  | 

 35

Як ми вже знаємо з уроку про неявну конвертацію типів даних, C++ дозволяє конвертувати значення з одного типу даних в інший. Наприклад, перетворимо значення типу int в значення типу double:

Мова C++ за замовчуванням знає, як виконувати конвертацію вбудованих типів даних. Однак вона не знає, як виконувати конвертацію з користувацькими типами даних (наприклад, з класами). Саме тут вступає в гру перевантаження операцій конвертації типів даних. Розглянемо наступний клас:

Клас Dollars містить певну кількість доларів у вигляді цілого числа (змінна-член m_dollars) і надає функції доступу для отримання і встановлення значення m_dollars. У ньому також є конструктор для конвертації значень типу int в тип Dollars (при створенні об’єкту користувач передає в якості аргументу значення типу int, яке потім перетворюється в значення типу Dollars).

Якщо ми можемо конвертувати int в Dollars, то логічно було б, якби ми могли конвертувати і Dollars назад в int, чи не так? Іноді це може бути корисно.

У наступному прикладі ми використовуємо метод getDollars() для конвертації значення типу Dollars в тип int для його подальшого виводу через функцію printInt():

Погодьтеся, викликати кожного разу метод getDollars() не дуже зручно. Було б простіше перевантажити операцію конвертації значень типу Dollars в тип int. Робиться це наступним чином:

Тут є дві речі, на які слід звернути увагу:

   В якості функції перевантаження використовується метод operator int(). Зверніть увагу, між словом operator і типом, в який ми хочемо виконати конвертацію (в даному випадку, тип int), знаходиться пробіл.

   Функція перевантаження не має типу повернення. Мова C++ передбачає, що ви будете повертати коректний тип.

Тепер функція printInt() викликається простіше:

Спочатку компілятор бачить (з визначення printInt()), що функція printInt() повинна приймати цілочисельний параметр. Потім він бачить, що змінна dollars не є типу int. Він дивиться, чи надали ми спосіб конвертації значення типу Dollars в тип int. Так як це у нас є, то викликається operator int(), який повертає значення типу int, і це значення передається в printInt().

Тепер ми можемо явно конвертувати об’єкт класу Dollars в тип int:

Ви можете перевантажувати операції перетворення будь-яких типів даних, включаючи ваші власні (користувацькі) типи даних!

Наприклад, ось клас Cents, в якому здійснене перевантаження операції перетворення значення типу Cents в значення типу Dollars:

Таким чином ми можемо напряму конвертувати центи в долари:

Результат виконання програми:

7

Все логічно: 700 центів = 7 доларів!

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *