- •2.1 Елементи концепції ооп .. 20
- •1.1 Коментарі.
- •1.2 Прототипи функцій.
- •1.3 Операція розширення області видимості.
- •1.4 Оголошення в операторах.
- •1.5 Перегрузка функцій.
- •1.6 Значення формальних параметрів по замовчуванню.
- •1.7 Посилання та вказівники.
- •1.8 Специфікатор inline
- •1.9 Операції new та delete .
- •1.10 Вказівник на void.
- •1.11 Зв’язування із збереженням типів
- •1.12 Про структури та об’єднання.
- •2.1 Елементи концепції ооп.
- •2.3 Опис протоколу класу.
- •2.4 Передача повідомлень об’єктам.
- •3 Функції-члени.
- •3.1 Функції-члени в межах та за межами формального опису класу.
- •3.2 Про вказівник this.
- •3.3 Перевантаження функцій-членів. Параметри по замовчуванню.
- •4. Конструктори та деструктори.
- •4.1 Поняття про конструктори.
- •4.2 Деструктори.
- •4.3 Досягнення високої ефективності. Конструктор копіювання.
- •5 Глобальні та локальні об’єкти.
- •6 Статична пам’ять та класи.
- •7. Наслідування
- •7.1 Синтаксична реалізація наслідування
- •7.2 Правила доступу до полів даних
- •7.3 Конструктори та деструктори в похідних класах
- •7.4 Використання заміщуючих функцій-членів.
- •7.5 Похідні класи та вказівники.
- •7.6 Ієрархія типів
- •7.7 Множинне наслідування
- •8 Вiртуальнi функцiї та класи
- •8.1 Віртуальні функції.
- •8.2 Чисті віртуальні функції. Абстрактні класи.
- •8.3 Віртуальні деструктори.
- •8.4 Посилання як засіб для реалізації поліморфізму
- •8.5 Технічна реалізація механізму віртуальних функцій.
- •8.6 Віртуальні базові класи
- •8.6.1 Ієрархії класів та наслідування
- •8.6.2 Віртуальні базові класи
- •8.6.3 Виклик конструкторів та віртуальні базові класи.
- •9 Друзі
- •9.1 Дружні класи.
- •9.2 Дружні функції.
- •10 Перевантаження операторiв.
- •10.1 Перевантаження операторів. Загальний підхід.
- •10.2 Перетворення типів.
- •10.3 Перевантаження деяких операторів.
- •10.3.1 Оператор індексування масиву.
- •10.3.2 Перевантаження оператора виклику функції.
- •10.3.3 Оператор доступу до члена класу.
- •10.3.4 Перевантаження операторів інкремента та декремента.
- •10.3.5 Перевантаження операторів управління пам’яттю (new,delete).
- •10.3.6 Перевантаження оператора присвоювання.
- •11.1 Функціональні шаблони
- •11.1.1 Визначення та використання шаблонів функцiй.
- •11.1.2 Перевантаження шаблонiв функцiї.
- •11.1.3 Cпецiалiзованi функцiї шаблона.
- •11.2 Шаблони класів.
- •11.2.1 Визначення шаблонів класу
- •11.2.2 Константи та типи як параметри шаблону
- •11.2.3 Використання шаблонних класів
- •11.2.4 Спецiалiзацiя шаблонiв класу.
- •11.3 Шаблони та конфiгурацiя компiлятора.
- •11.3.1 Шаблони Smart.
- •11.3.2 Шаблони Global I External.
- •12.2 Переадресація вводу-виводу
- •12.3 Розширення потоків для типів кориcтувача
- •12.4 Операції роботи з потоком як дружні
- •12.5 Форматований ввід-вивід
- •12.5.1 Ширина поля
- •12.5.2 Заповнюючий символ
- •12.5.3 Число цифр дійсних чисел
- •12.5.4 Прапорці форматування
- •12.5.5 Маніпулятори
- •12.6 Стан потоку
- •12.7 Файловий ввід-вивід
- •12.7.1 Конструктори файлових потокiв
- •12.7.2 Вiдкриття файлу
- •12.8 Неформатований ввід-вивід
- •12.9 Деякі функції вводу-виводу
- •12.10 Форматування в пам’яті
- •13 Управління виключеннями
- •13.1 Виключення та стек
- •13.2.1 Синтаксис основних конструкцій
- •13.2.1.1 Використання try та сatch
- •13.2.1.2 Використання throw
- •13.2.2 Тип виключення та конструктор копії
- •13.2.3 Пошук відповідного типу виключення
- •13.2.4 Використання terminate() та некеровані виключення
- •13.2.5 Робота з специфікаціями виключень
- •13.2.6 Робота з непередбаченими виключеннями
- •13.2.7 Робота з конструкторами та виключеннями
- •13.2.8 Динамічні об’єкти
- •13.2.9 Передача значень з конструктора та деструктора
- •13.2.10 Робота з ієрархіями виключень
- •13.2.11 Робота з специфічними класами виключень
- •13.3 Структурне управління виключеннями
- •13.3.1 Використання кадрованого управління виключеннями
- •13.3.1.1 Синтаксис
- •13.3.1.2 Про функцію RaiseException()
- •13.3.1.3 Фільтруючий вираз
- •13.3.1.4 Перехоплення виключення процесора
- •13.3.2 Використання завершуючих обробників виключень
12.8 Неформатований ввід-вивід
Бінарні файли
Для вiдкриття файлу в бiнарному режимi необхiдно включити прапорець binary в параметрі open_mode, який передається в конструктор чи функцiї open. В наступному прикладі файл читається в текстовому та бінарному режимах:
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
int main(void)
{ cout<<“Введіть ім’я вхідного файла”;
char name[MAX];
cin>>name;
ifstream ifbin(fname,ios::in|ios::binary);
ifstream iftxt(fmame,ios::in);
//одночасно вiдкриває файл
//у бiнарному i текстовому режимах
if (!fbin || !iftxt)
{ cout <<"помилка";
return 0;}
int countbin=0;
do {if (ifbin.get()!=EOF)
countbin++;}
while (ifbin);
cout <<“число символів, прочитаних в режимі binary”<<countbin;
int counttxt=0;
do
{if (iftxt.get()!=EOF)
counttxt++;}
while(iftxt);
cout <<“число символів, прочитаних в режимі text”
<<counttxt;
return 0;
}
12.9 Деякі функції вводу-виводу
Функція read()
Дозволяє дiставати з потоку вказану кiлькiсть символiв та записувати їх в
буфер:
istream & istream::read(char*f,int len);
istream & istream::read(singed char*f,int len);
istream & istream::read(unsinged char*f.int len);
f - адреса,
len - довжина буфера.
Функція write()
Помiщує в потiк вказане число символiв:
istream & istream::write(const char*p,int len);
Приклад:
// Текстовий режим:
int i=12345;
long e=98765432;
double d=2.4 e 12;
const char bfname[]="io.bin";
const char tfname[]="io.txt";
int main(void){
ofstream ofs(fname);
if (ofs)
{ofs <<i<<'\t'
<<l<<'\t'
<<d<<'\t'<<endl;
ofs.close();}
ifstream ifs(tfname);
if(ifs)
{ifs >>i>>l>>d;
ifs.close();
}
// Бiнарний режим:
ofs.open(bname,ios::out|ios::binary);
if(ofs)
{ofs.write ((char*)& i,sizeof(i));
ofs.write ((char*)& l,sizeof(l));
ofs.write ((char*)& d,sizeof(d));
ofs.close();
}
ifs.open(bname,ios::in|ios::binary)
if(ifs)
{ifs.read((char*)& i,sizeof(i));
ifs.read((char*)& l,sizeof(l));
ifs.read((char*)& d,sizeof(d));
ifs.close();}
return 0;}
Функція get()
Призначена для читання символа.
istream & istream::get(char&)
Приклад (читається символ потоку):
while(cin.get(ch))
{if(ch=='#') break;}
або:
while(ch=cin.get())!='#')
{if(ch==EOF) break)}
Використовують також один з перегружених варіантів функції get:
istream& istream::get(char&);
istream& istream::get(signed char&);
istream& istream::get(unsigned char&);
int main(void)
{char ch;
cout<<“введіть число, за яким слідує #”;
while(cin.get(ch))
{if(ch=='#') break;
cout<<(char)ch; }
return 0;
}
Є ще функцiї для читання рядка get та getline:
istream & istream::get (char*p,int l,char t);
Функцiя дiстає символи з потоку доти, поки не буде знайдений обмежувач t , не буде прочитано l символiв, або не зустрiнеться кiнець файлу.
Функція getline()
istream & istream::getline(char*p, int l,char t)
Дiє аналогiчно до функцiї get. Рiзниця мiж функцiями get i getline полягає в
тому, що getline дiстає обмежувач, але не записує його в буфер.
Функція ignore()
Функцiя дiстає не бiльше n символiв з потоку, поки не зустрiнеться обмежувач (по замовчанню - EOF).
istream & istream::ignore(int n=1,int d=EOF)
Функція grount()
Повертає число символiв, якi були прочитанi останньою функцiєю неформатованого вводу.
int istream::grount();
Функція peek()
Повертає значення чергового символу, не дiстаючи його з вхiдного потоку.
int istream::peek();
Функція putback()
Повертає в потiк останнiй символ, який був прочитаний.
istream & istream::putback(charch)
Функції seekg та seekp
Можуть використовуватись для позиціонування вказівника діставання /поміщення відповідно вхідного та вихідного потоку:
istream& istream::seekg(streampos);
istream& istream::seekg(streampos,ios::seek_dir);
istream& ostream::seekp(streampos);
istream& ostream::seekp(streampoff,ios::seek_dir);
Функції tellg() та tellp()
Дозволяють знайти біжучу позицію відповідно вхідного та вихідногої потока:
streampos istream::tellg();
streampos istream::tellp();