Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 2.10.2 Операції поміщення та вилучення - Програмування С, С++теорія та практика (частина 2) - Studbook
Главная->Інформатика та програмування->Содержание->2.10.2 Операції поміщення та вилучення

Програмування С, С++теорія та практика (частина 2)

2.10.2 Операції поміщення та вилучення

Бібліотека класів С++ передбачає два основних класи для введення та виведення: відповідно іхґгеат та охґгеат. Потокові оператори застосовуються наступним чином:

об'єкт_потоку_вводу >> змінна;

об'єкт_потоку_виводу << змінна;

Примітка. Ці оператори не слід плутати з відомими побітовими операторами зсуву вліво та вправо. Образно кажучи, в розглядуваному контексті перевантажені оператори >> та << однозначно ясно вказують напрямок потоку даних від одного об'єкта до іншого.

Потік соиґ (скагасґег оиґ) - стандартний символьний вихідний потік, що по замовчування відповідає пристрою виведення (дисплей). Клас озігеат використовує для виведення перевантажену операцію лівого зсуву (<<). Якщо ця операція застосовується об’єктом-потоком, вона носить ім'я операції поміщення у потік (ітегґіоп орегаґіоп). Наступний приклад друкує рядок, застосовуючи операцію поміщення до визначеного об’єкту соиґ.

#іпс1ийе<іоз'Ьгеат.Ь> іп£ таіп^оій.)

{

сои'Ь << "Не11о!"; ге'Ьигп 0;

}

Проаналізуємо, як відпрацює такий фрагмент. По-перше, С++ визначить, що в даній операції << лівий аргумент соиґ має тип озігеат, а правий - скаг*. За цими даними у заголовочному файлі буде знайдений відповідний прототип функції - о$ґгеат& орегаґог<<(о$ґгеат&, скаг*). Після цього буде згенерований виклик функції поміщення у потік орегаґог<< з рядком ‘Неііо!’ та екземпляром соиґ в якості параметрів. іншими словами, здійснюватиметься виклик стандартної бібліотечної функції орегаґог<<(соиґ, ‘Неііо! ’), як того у даному випадку вимагає прототип.

Аналогом в традиційному Сі потоку соиґ відповідає функція /ргіпґ/() та ім'я пристрою виведення зґйоиґ. Розглянемо простий приклад, що застосовує у двох варіантах відповідно ргіпґ/() (це тільки скорочена форма/ргіпґ/(іі^оиґ, ...)) та об'єкт соиґ.

1          варіант йоиЬ1е пит=2.35;

ргіп^£ ("зЬом 1 : % 1гі \п", пит) ;

// непередбачене "сміття" на виході !

2  варіант

йоиЬ1е пит=2.35; сои^<<"зЬом 2="<<пит<<"\п";

// а тут все буде правильно

Саме тут і впадає в очі перевага потоків. Символи % ІС в першому варіанті повідомляють про те, що змінна пит відноситься до типу Іопд. У наступному рядку при активації функції виявляється невідповідність типів, і ргіпґ/() мовчки виконує неправильне виведення. Застосовуючи у другому варіанті об'єкт-потік, подібна помилка просто виключена - інформація про тип автоматично надходить безпосередньо від самого об'єкту соиґ.

Потік сіп (скагасґвг іп) - стандартний символьний потік введення, що по замовчування відповідає клавіатурі. Клас ізґгеат використовує для введення перевантажену операцію правого зсуву (>>). У розглядуваному контексті її називають операцією вилучення з потоку (ехґгасґіоп орегаґіоп). Аналогом цього потоку в Сі відповідає функція /зсап/() та ім'я пристрою зґСіп. Наступний приклад застосовує операцію вилучення зі стандартного потоку для визначеного об’єкту сіп, аби прочитати рядок з клавіатури:

#іпс1игіе<іоз'Ьгеат.Ь> іп£ таіп^оігі.)

{

сЬаг пате [100];

сои£ << " Введіть ваше ім'я: ";

сіп >> пате;

сои£ << " Привіт, ";

сои£ << пате;

ге'Ьигп 0;

}

Класи ізґгеат та озґгеат перевантажують відповідно >> та << для усіх вбудованих типів даних. Таке перевантаження дозволяє використовувати однаковий синтаксис для роботи зі змінними різних типів. Наступний приклад ілюструє тотожність синтаксису в такій ситуації:

#іпс1ийе <іоз'Ьгеат.Ь> іп£ таіп ^оій)

{

сЬаг с = 'А' ; зідпей сЬаг зс = 'В' ; ипзідпей сЬаг ис = 'С' ; іп£ і = 0хй;

£1оа£ £ = 1.7; йоиЬ1е й = 2.8;

сои£

<< 

с;

//

Викликає

орегагог

<< 

(сЬаг)

сои£

<< 

зс;

//

Викликає

орегагог

<< 

(зідпей сЬаг)

сои£

<< 

ис;

//

Викликає

орегагог

<< 

(ипзідпей сЬаг)

сои£

<< 

і;

//

Викликає

орегагог

<< 

(іп£)

сои£

<< 

£;

//

Викликає

орегагог

<< 

(£1оа£)

сои£

<< 

й;

//

Викликає

орегагог

<< 

(йоиЬ1е)

ге'Ьигп 0 ;

 

}

 

44