ТА_Методички / Lec_9
.pdfНаприклад: |
|
|
|
int a, b, c; |
cin >> b; |
cin >> c; |
cout << “a+b+c = ” << |
cin >> a; |
|||
a+b+c << ‘\n’; |
|
|
|
cout << “a*b*c = ” << a*b*c << ‘\n’;
Після вводу значень a = 2, b = 3, c = 4 на екрані з’явиться напис
a+b+c = 9 a*b*c = 24
Форматування
Деколи виникає необхідність регулювати вивід тексту. Функція width() вказує мінімальне число символів, які будуть використані наступною операцією виводу числового значення або символьної стрічки. Наприклад в результаті виконання
cout.width(5);
cout << ‘(’ << 4 << ‘)’;
буде надруковано число 4 в полі з 5 символів ( 4) Символ-заповнювач можна задати функцією fill().
11/38
Наприклад в результаті виконання
cout.width(5); cout.fill (‘#’);
cout << ‘(’ << “ab” << ‘)’;
отримаємо на виході (###ab).
Виклик функції width впливає тільки на операцію виводу, яка виконується безпосередньо за нею, так що після операторів
cout << 1234.56789 << ‘\n’;
cout.setf (ios::scientific, ios::floatfield); cout << 1234.56789 << ‘\n’;
cout.setf (ios::fixed, ios::floatfield); cout <<1234.56789 << ‘\n’;
отримаємо 234.57 1.2345678e+03 1234.567890
В результаті звертання до функції cout.precision(n) буде встановлене значення по замовчуванню для числа цифр, що друкуються, яке рівне n. Виклик функції precision впливає на всі наступні операції вводу/виводу до наступного виклику precision.
12/38
Відкривання і закривання файлів
В С++ реалізуються три типи потоків для роботи з файлами.
ifstream in; |
відкривання файла для читання; |
ofstream out; |
відкривання файла для запису; |
fstream both; |
відкривання файла для читання і запису. |
Якщо ви відкрили потік, єдиний шлях зв’язати потік з файлом реалізується функцією open(), яка є членом кожного з трьох класів, які реалізують ці потоки. Прототип цієї функції:
void open (char *filename, int mode, int access)
filename – ім’я файлу |
|
|
mode |
- спосіб відкриття файлу: |
|
ios::app |
//додати |
|
ios::ate |
//відкрити і шукати кінець файлу |
|
ios::in |
//відкрити для читання |
|
ios::nocreate |
//приводить до неуспіху, якщо файл не існує |
|
ios::noreplace |
//приводить до неуспіху, якщо файл існує |
|
ios::out |
//відкрити для виводу |
|
ios::trunc |
//відсікти файл до нульової довжини |
|
access |
- визначає, з якими атрибутами відкритий файл: |
|
|
0 - нормальний файл (по замовчуванню) |
|
13/38
1 - read-only
2 - hidden
4 - system
8 - archive
Приклади відкривання файлу:
ofstream out;
out.open (“test”, ios::out, 0); fstream mystream;
mystream.open (“test”, ios::in | ios::out); ifstream in;
in.open (“test”);
Якщо в силу будь-яких причин файл не може бути відкритий, значення потоку рівне 0.
Для закривання файла використовується функція-член close. Приклад:
mystream close();
Для фіксування кінця файла використовується функція-член eof(), прототип якої
int eof();
Вона повертає ненульову величину, коли досягається кінець файла і навпаки.
14/38
Наступна програма записує ціле значення, значення з плаваючою крапкою, символьну змінну і символьну стрічку у файл, а потім зчитує з цього файла.
#include<iostream.h>
#include<fstream.h> int main (void) {
char ch; int i; float f;
char str[80];
ofstream out (“test”); if (! out){
cout << “Cannot open file”; return 1;
}
out << 10 << “#” << 123.23 << ‘\n’; out << “This is a short text file.”; out.close();
ifstream in(“test”); if (! in){
cout << “Cannot open file”; return 1;
}
in >>i; in >>f;
15/38
in >>ch; in >>str;
cout << I << “ ” << f << “ “ << ch << ‘\n’; cout << str;
in.close(); return 0;
}
Ключові слова мови C++
Стандарт мови C++ містить 63 ключові слова. Вони наведені в табл. 1. Таблиця 1. Ключові слова мови C++
asm |
auto |
bool |
break |
|
1 |
|
case |
catch |
char |
class |
|
I |
|
const |
const_cast |
continue |
default |
|
1 |
|
delate |
do |
double |
dynamic_cast |
1 |
||
else |
enum |
explicit |
export |
|
j |
|
extern |
false |
float |
for |
1 |
|
|
friend |
goto |
if |
inline |
|
1 |
|
int |
long |
mutable |
namespace |
J |
||
new |
operator |
private |
protected |
1 |
|
|
public |
register |
reinterpret_ |
return |
|
I |
|
|
|
cast |
|
|
|
|
16/38
short |
signed |
sizeof |
static |
| |
static_cast |
struct |
switch |
template |
I |
this |
throw |
true |
try |
\ |
typedef |
typeid |
typename |
union |
] |
unsigned |
using |
virtual |
void |
|
volatile |
wchar_t |
while |
|
|
Структура програми мовою C++
Програма мовою C++ має такий загальний вид.
#директиви include
•оголошення базових класів
•оголошення похідних класів
•прототипи звичайних функцій int main()
{
//... }
•визначення звичайних функцій
Убільшості великих проектів всі оголошення класів повинні розміщати в окремому заголовному файлі, що може включатися в кожний модуль. Однак загальна структура програми залишається незмінною.
17/38
2. Класи
Класи є однією з важливих частин мови C++. Для того, щоб створити об’єкт, в мові C++ потрібно спочатку визначити його загальний вигляд, використовуючи ключове слово class. З синтаксичної точки зору клас подібний на структуру. Розглянемо в якості прикладу клас, який визначає тип під назвою stack. З його допомогою можна створити реальний стек.
#define SIZE 100
// В цьому фрагменті оголошується клас stack class stack {
int stck[SIZE]; int tos;
public:
void init();
void push(int i); int pop();
};
Клас може містити відкриту і закриту частини. По замовчуванню, всі члени класу є закритими. Наприклад, змінні stck і tos є закритими. Це означає, що до них неможливо звернутися з функцій, які не є членами класу stack.
18/38
Таким чином, досягається інкапсуляція – доступ до закритих елементів класу строго контролюється. В класі також можна визначити закриті функції, які можуть викликатись іншими членами класу.
Для того, щоб відкрити елементи класу, (тобто зробити їх доступними для інших частин програми), необхідно оголосити їх з допомогою ключового слова public.
Всі змінні чи функції, розміщені в розділі public, доступні для довільних функцій програми. По суті, зовнішня частина програми отримує доступ до об’єкту саме через його відкриті функції-члени. Хоча змінні можна оголошувати відкритими, цього потрібно уникати. Навпаки, всі дані рекомендується оголошувати закритими, контролюючи доступ до них з допомогою відкритих функцій. Крім того, слід звернути увагу на те, що після ключового слова public у визначенні класу stack стоїть двокрапка.
Функції init(), push(int i) і pop() називаються функціями-членами, оскільки вони є частиною класу stack.
Змінні stck і tos називаються змінними-членами (або даними-членами). Нагадаємо, що об’єкт створює зв’язок між кодом і даними. Тільки функції-члени мають доступ до закритих членів свого класу. Отже, доступ до змінних stck і tos мають тільки функції init(), push(int i) і pop().
19/38
Визначивши клас, можна створити об’єкт цього типу. По суті, ім’я класу стає новим специфікатором типу даних. Наприклад, наступний оператор створює об’єкт з іменем mystack типу stack.
stack mystack;
Оголошуючи об’єкт класу, ми створюємо екземпляр (instance) цього класу. В даному випадку змінна mystack є екземпляром класу stack. Крім того, об’єкти можна створювати, вказуючи їх ім’я зразу після визначення класу, тобто після закриваючої фігурної дужки (аналогічно, як екземпляр структури).
В мові C++ з допомогою ключового слова class визначається новий тип даних, який можна використовувати для створення об’єктів цього типу. Отже, об’єкт – це екземпляр класу. В цьому розумінні він нічим не відрізняється від інших змінних, наприклад, від змінної, яка являє собою екземпляр типу int.
Іншими словами, клас є логічною абстракцією, а об’єкт – її реальним втіленням, яке існує в пам’яті комп’ютера.
20/38
