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

У розглянутих раніше прикладах програм для виконання операції введення або виведення "класових" даних створювалися функції-члени класів, призначення яких полягало тільки у тому, щоб ввести або вивести ці дані. Незважаючи на те, що у такому вирішенні цих питань немає нічого неправильного, проте у мові про­грамування C++ передбачено дещо вдаліший спосіб виконання операцій введен- ня-виведення "класових" даних - шляхом перевизначення операторів введення- виведення "«" і

У мові C++ оператор "«" називається оператором виведення або вставлен­ня, оскільки він вставляє символи у потік. Аналогічно оператор "»" називається оператором введення або вилучення, оскільки він вилучає символи з потоку.

Як уже зазначалося вище, оператори введення-виведення вже перевизначені (у заголовку <iostream>) для того, щоби вони могли виконувати операції потоково­го введення або виведення даних будь-яких вбудованих С++-типів. У цьому під­розділі можна буде дізнатися про те, як визначити ці оператори для створення власних класів.

  1. Створення перевюначених операторів виведення даних

Як простий приклад розглянемо механізм створення оператора виведення да­них для уже відомої нам з попередніх розділів (див. поч. у розд. 4.1) такої версії класу kooClass:

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

int х, у, z; // Тривимірні координати kooClass(int а, int b, int с) {х = а; у = b; z = с;}

};

Щоб створити операторну функцію виведення даних для об'єктів типу kooC­lass, необхідно перевизначити оператор виведення даних "«". Один з можливих способів його реалізації має такий вигляд:

// Відображення тривимірних координат х, у, z // Перевизначений оператор виведення даних для класу kooClass ostream &operator«(ostream &stream, kooClass obj)

{

stream « obj.x «", stream « obj.y «", stream « obj.z « endl;

return stream; // Повертає посилання на параметр stream

}

Розглянемо уважно цю операторну функцію, оскільки її вміст характерний для багатьох операторних функцій виведення даних. По-перше, зверніть увагу на те, що, згідно з оголошенням, вона повертає посилання на об'єкт типу ostream. Це дає змогу декілька звичайних операторів виведення даних об'єднати в одному складеному виразі. По-друге, зверніть увагу також на те, що ця функція має два параметри. Перший є посиланням на потік, який використовується в лівій частині оператора "«". Другим є об'єкт, який знаходиться у правій частині цього опера­тора1. Саме тіло операторної функції складається з настанов виведення трьох зна­чень координат, що містяться в об'єкті типу kooClass, і настанови повернення пото­ку stream. Нижче наведено навчальну програму, у якій продемонстровано меха­нізм використання перевизначеного оператора виведення даних.

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

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

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

int х, у, z; // Тривимірні координати kooClass(int а, int b, int с) {х = а; у = b; z = с;}

};

// Відображення тривимірних координат х, у, z // Перевизначений оператор виведення даних для класу kooClass ostream &operator«(ostream &stream, kooClass obj)

{

stream « obj.x «", stream « obj.y «", stream « obj.z « endl;

return stream; // Повертає посилання на параметр stream

}