МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
||
Перевизначення операції присвоєнняТака операція використовується для присвоєння значення одного об‘єкту даного класу іншому. class Cat { public: int GetAge(); int GetW (); Cat & operator= (Cat &); private: int *Age; int *W; }; Cat & Cat :: operator= (Cat &h) { *Age = h.GetAge();// присвоєння одних змінних іншим *W = h.GetW(); return *this; //повернення вказівника об‘єкту }
int main() { Cat Frisky; Cat Whiskers; … Whiskers=Frisky; // присвоєння одного об‘єкту іншому return 0; } Зверніть увагу на використання посилкових типів в операції =. Перевизначена операція присвоєння не наслідується. Якщо для будь-якого класу Х нема введеної користувачем операції = , то по замовчуванню операція = визначається як поелементне присвоєння для всіх членів класу.
Перевизначення операції -> Доступ до члену класу розглядається як унарна операція. Вираз x-m, де х є об‘єкт класу Х інтерпретується як (x.operator->( )) –m, так що функція operator->( ) має повертати вказівник на об‘єкт класу. Має бути визначена як нестатична функція-член класу.
Загальні правила перевизначення. 1. С++ не розрізняє перевизначені префіксні та постфіксні версії ++ та --. 2. Операція, яка перевизначається, має існувати в мові. Наприклад, неможна визначати оператор #. 3. Неможна перевизначити наступні операції: . :: ? : 4. Пріоритет операцій при перевизначенні зберігається. 5. Не можно змінити число операндів операції, тобто унарна для 1-го операнду, бінарна для 2-х. Дружні функції Дружньою функцією класу називається функція, яка сама не є членом класу, але має повні права на доступ до закритих та захищених елементів класу. Оскільки така функція не є членом класу, то вона не може бути вибрана з допомогою операторів (.) та (->), Дружня функція класу викликається звичайним способом. Для опису дружньої функції використовується ключове слово friend. Наприклад, class X { int i; friend void F( X *, int); public: void M (int); }; void F(X *px, int a) { px ->i=a;} //доступ до закритого елемента через вказівник об‘єкту void X ::M(int a) {i=a;} //прямий доступ до закритого елемента
int main( ) { X mm; F(&mm, 6);//виклик фружньої функції mm.M(6);//виклик методу класу }
З допомогою опису friend ім‘я класу можна оголосити всі функції класу дружніми для іншого класу:
class Y { void f1(X &); void f2(X *); }; class X { friend Y; int i; int M( int); }; Функції можуть бути дружніми більш ніж одному класу. Також можна оголосити деякі окремі функції-члени класу дружніми для іншого класу: class X {... void f1(int); ...}; class Y { int i; friend void X::f1(int); };
Відношення дружності не є транзитивним: Х дружній Y, Y дружній Z, але не обов‘язково Х дружній Z. Лекція 8 ПОТОКИ С++ підтримує стандартну бібліотеку iostream, яка повністю відповідає за ввід та вивід даних. Перенос обробки операцій вводу-виводу в спеціальні бібліотеки дозволив отримати ефект незалежності від платформи. Це дозволяє створити програму на С++ для комп‘ютерів РС, а потім відкомпілювати її для робочої станції SUN. Класи iostreamрозглядають інформацію як побітовий потік даних. Якщо дані виводяться у файл або на екран, джерело потоку включено в програму. Якщо потік направлений в протилежну сторону, то дані поступають з клавіатури або файлу у змінні. Головна задача потоків – інкапсуляція процедури обміну інформацією з диском або дисплеєм комп‘ютера. Запис на диск та вивід на екран потребують багато часу, що призводить до блокування виконання програми. Для вирішення цієї проблеми потоки підтримують буферизацію. Спочатку дані записуються у буфер потоку, а після його наповнення уся інформація разом записується на диск. Реалізація потоків та буферів відбувається засобами об‘єктно-орієнтованого підходу С++: - клас streambufкерує буфером, наповнює його, очищує та скидає; - клас iosє базовим для класів потоків вводу-виводу. В якості змінної класу iosє об‘єкт streambuf; - кккласи istreamтаostreamє похідними від класу iosта відповідають відповідно за потоковий ввід та вивід даних; - клас iosteamє похідним від класів istreamтаostreamі забезпечує функції вводу з клавіатури та виводу на екран; - клас fstreamвикористовується для операцій вводу-виводу з файлів. При запуску програми, що включає клас iostreamстворюються 4 об‘єкти: 1) об‘єкт CIN – обробляє ввід з клавіатури; 2) об‘єкт COUT – обробляє вивід на екран; 3) об‘єкт CERR – обробляє вивід повідомлень про помилки на екран; 4) об‘єкт CLOG – обробляє пере адресацію повідомлень про помилки у файл регістрації. Ввід даних через об‘єкт CIN
Об‘єкт CIN включає перевантажений оператор вводу >>, який записує дані з буфера в локальну змінну. int a; cin >> a; Оператор вводу перевантажений так, що підходить для вводу даних всіх основних типів int, short, long, char, float, double. Коли компілятор зустрічає вираз cin >> a; то запускається той варіант вводу, який відповідає типу змінної а. Для попереднього прикладу це буде варіант перевантаженого оператора вводу для цілого типу istream & operator >> (int &) Приклад: #include <iostream> void main() { int myInt; float myFloat; cin>> myInt; cin >> myFloat; } Об‘єкт CIN може приймати аргументом вказівник на стрічку символів. Але при цьому пробіл сприймається як роздільник стрічок і при зустрічі пробілу cin завершує ввід, додає кінцевий нульовий символ.
char YourName[50]; cin >> YourName; Функції об‘єкту CIN
1. Функція get() служить для зчитування одного символу зі стандартного пристрою вводу. Цей символ потоку вводу присвоюється символьній змінній, що передається функції get() як параметр.
char a; cin.get(a); Для вводу символьного масиву необхідно вказати в параметрах функції get() ім‘я масиву та максимальну кількість символів з врахуванням кінцевого нульового символу.
char Mas[256]; cin.get(Mas, 256);
2. Функція ignore() ігнорує частину символів до кінця стрічки або до кінця файлу. Вона приймає два параметри – кількість символів, що пропускається та символ закінчення.
ignore(80, ‘\n’);
Програма пропустить ввід 80 символів, якщо раніше не зустріне символ нової стрічки. Він також видаляється з буферу і функція завершує роботу.
3. Функція peek() проглядає але не вводить один символ з буфера. 4. Функція putback() вставляє один символ в потік вводу. Приклад, замінити всі знаки оклику при вводі знаком долара і видалити всі знаки решітка. #include <iostream> void main() { char ch; while (cin.get(ch)) { if (ch ==’!’) cin.putback(‘$’); // не вводити ! а вводити $ else cout << ch; while ( cin.peek() ==’#’) cin.ignore(1, ‘#’); // пропустити знак # } }
Вивід даних через об‘єкт COUT Об‘єкт COUT дозволяє форматувати дані, виводити на екран стрічки, числа, вирівнювати стовбці, виводити числові значення в десятковому та шіснадцятковому форматі. Перед виводом даних рекомендується провести очистку буфера. Це робить функція flush() об‘єкту COUT. cout << flush();
Функції об‘єкту COUT
1. Функція put() виводить окремі символи.
cout.put(‘Y’);
2. Функція write() працює так само, як оператор вводу << , але вона приймає параметр, що вказує максимальну кількість символів при виводі.
char Mas[ ] = “ab c def”; int len=strlen(Mas); // 8 int s=len-4; // 4 cout.write(Mas, len) << “\n”; // ab c def cout.write(Mas,s) << ”\n”; // ab c
3. За замовчуванням ширина поля виводу автоматично встановлюється так, щоб вмістити всі символи стрічки з буфера виводу. Але з допомогою функції width() можна встановити точне значення ширини поля виводу. Ця функція є членом об‘єкту COUT.
cout.width(4); cout << 12;//_ _ 12
4. Щоб заповнити пусті позиції певним символом , на приклад, «*» використовують функцію fill(), в параметрі якої вказують символ заповнення.
cout.fill(‘*’);
Переглядів: 1178 |
Не знайшли потрібну інформацію? Скористайтесь пошуком google: |
© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове. |
|