рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Процедурно-орієнтоване (структурне) програмування

Процедурно-орієнтоване (структурне) програмування - раздел Программирование, Зміст   Частина Перша. Процедурно-Орі...

Зміст

 

Частина перша. Процедурно-орієнтоване (структурне) програмування. 6

Лекція 1. Типи даних С++. 6

1. Структура програми. 6

2. Коментарі 7

3. Змінні й типи даних. 7

4. Константи. 8

5. Перерахування. 10

Лекція 2. Вирази й оператори. 12

1. Арифметичні операції 12

2. Вирази. 12

3. Операції інкременту й декременту. 12

4. Логічні операції 12

5. Порозрядні оператори. 12

6. Операції відношення. 14

7. Операції присвоювання. 14

8. Арифметичні перетворення. 14

9. Оператори. 15

10. Пріоритет і порядок виконання операцій. 16

Лекція 3. Керування виконанням програм.. 17

1. Оператор if. 17

2. Оператор switch. 17

3. Оператор for 17

4. Оператор while. 18

5. Цикл do - while. 19

6. Оператор break. 20

7. Оператор continue. 20

8. Оператор мітки. 20

Лекція 4. Функції 22

1. Функції 22

2. Статичні й автоматичні класи пам’яті 24

3. Статична та зовнішня область дії 25

4. Регістрові змінні 25

5. Змінні volatile. 26

6. Рекурсія. 26

Лекція 5. Покажчики й посилання. 29

1. Покажчики. 29

2. Покажчики на функції 30

3. Посилання. 31

Лекція 6. Масиви і структури. 33

1. Вектори. 33

2. Ініціалізація багатовимірних масивів. 33

3. Операції розподілу пам’яті 34

4. Структури. 34

5. Еквівалентність типів. 37

Лекція 7. Рядки й операції з ними. 38

1. Бібліотека string.h. 38

2. Визначення довжини рядків. 38

3. Копіювання й конкатенація рядків. 38

4. Порівняння рядків. 38

5. Пошук символів. 39

6. Пошук підрядків. 40

Частина друга. Об’єктно-орієнтоване програмування. 42

Лекція 8. Вступ до об’єктно-орієнтованого програмування. 42

1. Термінологія. 42

2. Абстракція, інкапсуляція, успадкування і поліморфізм: чотири основних властивості 42

3. Оголошення класу. 43

Лекція 9. Конструктори і деструктори. 49

1. Конструктори. 49

2. Деструктори. 51

3. Покажчики на члени класу. 52

Лекція 10. Перевантаження операторів. 53

1. Перевантаження операцій. 53

2. Унарні оператори. 53

3. Бінарні оператори. 53

4. Операція виклику функції 54

5. Операція присвоювання. 54

6. Операція індексації 55

7. Операція доступу до члена класу. 57

Лекція 11. Перевантаження операторів (продовження) 58

1. Операції інкременту і декременту. 58

2. Операції new і delete. 59

3. Операції перетворення. 61

4. Дружні функції 62

Лекція 12. Успадкування. 65

1. Похідні класи. 65

2. Оголошення. 65

3. Функції-члени. 65

4. Оголошення доступу. 66

5. Покажчики і посилання. 66

6. Віртуальні функції-члени. 66

7. Конструктори базових класів. 68

8. Деструктори базових класів. 69

9. Множинні базові класи. 69

Лекція 13. Віртуальні базові класи. 71

1. Віртуальні базові класи. 71

2. Дані-члени. 73

3. Приклад використання статичних членів. 74

Лекція 14. Потокове введення-виведення. 75

1. Класи потоків введення-виведення. 75

2. Стани помилки. 75

3. Потокове виведення. 76

4. Операція вставки. 76

5. Потокове введення. 77

6. Операція витягу. 77

7. Файлове виведення. 79

8. Файлове введення. 80

9. Інше файлове введення/виведення. 80

Лекція 15. Стани форматування. 81

1. Стани форматування. 81

2. Установка й скидання флагів форматування. 81

3. Установка символа-заповнювача. 82

4. Установка ширини поля. 82

5. Установка системи числення. 83

6. Установка точності 83

Лекція 16. Шаблони. 84

1. Шаблони. 84

2. Шаблони функцій. 84

3. Шаблони класів. 85

4. Статичні дані-члени. 86

5. Шаблони функцій-членів. 86

6. Дружні функції 87

Лекція 17. Виняткові ситуації 91

1. Виняткові ситуації 91

2. Використання виняткових ситуацій. 91

3. Збудження декількох виняткових ситуацій. 91

4. Використання блоків try. 92

5. Оголошення виняткових ситуацій. 92

6. Написання оброблювачів виняткових ситуацій. 93

7. Неопрацьовані виняткові ситуації 94

8. Виняткові ситуації й локальні об’єкти. 95

9. Виняткові ситуації й конструктори. 95

Список рекомендованої літератури. 96


Частина перша. Процедурно-орієнтоване (структурне) програмування

 

Лекція 1. Типи даних С++

 

Структура програми

// Welcome.cpp #include <stdio.h> main()

Типи даних

3.2. Ідентифікатори Ідентифікатори являють собою послідовність букв, підкреслень або цифр,… Неправильні:

Константи

Десяткові 23, -42, +1991 Мають тип int, якщо значення константи не перевищує максимально припустимого значення для числа типу int на даній…

Перерахування

  enum {chocolate, vanilla, strawberry}; // chocolate = 0, vanilla = 1,… enum Fruit {orange, cherry, banana}; //Тип

Вирази

Вирази – це сполучення однієї або більше констант, змінних чи викликів функцій і нуля або більше операцій.

 

i = 0, C++, c = sqrt(a * a + b * b).

 

Вирази розглядаються як true, якщо результат їхнього обчислення не дорівнює нулю, або як false, якщо результат дорівнює нулю.

3. Операції інкременту й декременту

i++ Збільшити i на 1, результатом виразу є значення i до збільшення.
++i Збільшити i на 1, результатом виразу є значення i після збільшення.
-- Має ту ж семантику, що й ++, але викликає зменшення на 1.

 

int i = 3, j, k;

j = i ++; // i = 4, j = 3

k = --j; // j = 2, k = 2

4. Логічні операції

Заперечення !
Або ||
І &&

 

5. Порозрядні оператори

5.1. Порозрядна операція І

A & B == C
& ==
& ==
& ==
& ==

 

 

10101101 операнд

00001111 маска

00001101 результат

 

Розряди маски, рівні 1, дозволяють розрядам операнда потрапляти в результат баз зміни. Розряди маски, рівні 0, блокують відповідні розряди операнда, скидаючи їх також в 0 і в результаті.

Порозрядний оператор АБО

A | B == C
| ==
| ==
| ==
| ==

 

10101101 операнд

01000011 маска

11101111 результат

 

Розряди маски, рівні 1, встановлюють рівними 1 відповідні розряди результату, незважаючи на значення відповідних розрядів операнда. Розряди маски, рівні 0, дозволяють розрядам операнда потрапляти в результат без зміни.

5.3. Порозрядний оператор, що виключає АБО

A ^ B == C
^ ==
^ ==
^ ==
^ ==

 

10101101 операнд

00111100 маска

10010001 результат

 

Розряди маски, рівні 1, перемикають значення бітів операнда на протилежні. Нульові біти маски дозволяють відповідним бітам операнда перейти в результат без змін.

5.4. Зміщення бітів вліво

C = A << 3; // B == 3

A 10101101

C 01101000

 

Позиції, які вивільнюються праворуч, заповнюються нулями, у той час як старші біти, що зміщуються вліво, губляться.

 

5.5. Зміщення бітів вправо

C = A >> 3; // B == 3

A 01011001

C 00001011

Якщо операції зміщення вліво множать числа на 2, то операції зміщення вправо виконують ділення на 2.

5.6. Доповнення до одиниці

A = ~ B;

000101100 операнд

111010011 результат

 

Оператор порозрядного доповнення до одиниці перемикає всі біти значення з 1 на 0 і з 0 на 1. Доповнення до одиниці є унарним оператором. Використовується для виконання порозрядного заперечення двійкових значень.

Один плюс доповнення до одиниці будь-якого знакового цілого v дорівнює тому ж самому значенню із протилежним знаком.

6. Операції відношення

Дорівнює ==
Не дорівнює !=
Менше <
Менше або дорівнює <=
Більше >
Більше або дорівнює >=

 

7. Операції присвоювання

v = e;

a = b = c = 0; // a = (b = (c = 0));

+=, -=, *=, /=, %=.

8. Арифметичні перетворення

- Якщо один з операндів має тип long double, double або float, то інші операнди перетворюються до того самого типу, причому long double має максимальний пріоритет.

- Інакше, якщо значення типу char, unsigned char, short int, unsigned short int чи enum можуть бути представлені типом int, то всі операнди зазначених типів перетворюються в int, інакше – в unsigned int.

- Потім, якщо один з операндів має тип unsigned long, то інші перетворюються в unsigned long.

- Інакше, якщо один операнд має тип long int, а інші unsigned int, і long int може представляти всі значення unsigned int, то unsigned int перетворюється в long int, інакше обоє операндів перетворюються в тип unsigned long int.

- Інакше, якщо один з операндів long або int, то інші перетворюються у той же тип, причому long має максимальний пріоритет.

- Інакше обидва операнди мають тип int.

 

Приклад:

 

double value = 31.0;

int count = 16;

float many = 2.0f;

char num = 4;

 

value = (value - count) * (count - num) / many + num / many;

 

value – count Значення count перетворюється в double й обчислюється результат 15.0 (double).
count – num num перетвориться з char в int, і результат 12 виходить, як значення типу int.
(double) 15.0 * (int) 12 12 конвертується в 12.0 як double, і результат = 180.0 (double).
double (180.0) / many many перетвориться в double, й одержуємо результат 90.0 (double).
num / many num перетвориться в (float) 4.0, і результат дорівнює (float) 2.0.
double (90.0) + float (2.0) (float) 2.0 перетвориться в (double) 2.0, й обчислюється кінцевий результат 92.0 (double).

 

Оператори

Оператор виразу

Оператор виразу являє собою вирази, що закінчується крапкою з комою (;).

language = C++;

9.2. Порожній оператор

Порожній оператор – це просто крапка з комою. Він використовується, коли після мітки або операторів while, do чи for не повинно бути ніякого оператора.

 

while (*p++ = *q++);

Складений оператор

Складений оператор являє собою нуль або більше операторів, вкладених у фігурні дужки. Він припустимий скрізь, де допустимий оператор виразу. Складений оператор визначає нову область дії, тобто змінні, розміщені всередині складеного оператора, є локальними в ньому й приховують зовнішні змінні з тими ж іменами.

{ int t = a; a = b; b = t};

складений оператор має деструктор для локальних змінних класу, що викликається при виході із блока.

Оператор оголошення

Оператор оголошення описує ідентифікатор та його тип.

 

10. Пріоритет і порядок виконання операцій

Операція Опис Асоціативність
:: :: Доступ до глобальної змінного Позначення члена структури Пр
() [] .-> sizeof Виклик функції Індексація Вибір елемента Розмір   Пр
! ~ - + ++ -і & * () new delete Логічне НІ Доповнення до одиниці Унарні мінус, плюс Інкремент, декремент Обчислення адреси, зняття посилання Приведення типу Виділення, звільнення пам’яті Пр Пр Пр Пр Пр Пр  
.* ->* Вибір поля через покажчик  
* / % Множення, ділення, модуль  
+ - Додавання, віднімання  
<< >> Лівий зсув, правий зсув  
< <= > >= Менше, менше або дорівнює Більше, більше або дорівнює  
== != Дорівнює, не дорівнює  
& Побітове І  
^ Побітове виключне АБО  
| Побітове АБО  
&& Логічне І  
|| Логічне АБО  
?: Арифметичне ЯКЩО Пр
= *= /= %= += -= <<= >>= &= ^= |= Присвоювання Пр
, Кома  

 

Лекція 3. Керування виконанням програм

Оператор if

if (вираз) оператор1

else оператор2

 

Оператор if обчислює вираз, і, якщо він має ненульовий результат (true), виконується оператор1, в іншому випадку – оператор2. Конструкція else і оператор2 можуть бути опущені.

 

Оператор switch

switch (вираз)

{

case конст_ вираз1:

case конст_ вираз2:

...

оператори

case конст_ вираз3:

case конст_ вираз4:

...

оператори

default:

оператори

}

В операторі switch обчислюється вираз і виконується набір операторів, які знаходяться за відповідним константним виразом. У протилежному випадку виконуються оператори, що знаходяться за default.

Для переривання оператора switch використовується оператор break.

 

switch (c)

{

case '+': n = a + b; break;

case '-': n = a - b; break;

case '*': n = a * b; break;

case '/': n = a / b; break;

default:

Error(“Bad operator:”, c);

}

 

В операторі switch не допускається збіг константних виразів.

 

Оператор for

for (оператор1; вираз1; вираз2)

оператор2;

 

Оператор for представляє скорочений запис для:

 

оператор1;

while(вираз1)

{

оператор2;

вираз2;

}

 

за винятком того, що оператор continue в операторі2 буде викликати продовження процесу виконання, починаючи з виразу2.

Якщо оператор1 – це оголошення, то область дії оголошених змінних поширюється до кінця складеного оператора2.

Оператор1 і обоє виразів можуть бути опущені (але крапки з комами повинні залишатися). Коли вираз1 опущений, його значення вважається ненульовим.

 

Приклад:

 

//ASCII.cpp

#include <stdio.h>

main()

{

unsigned char c;

for(c=32;c<128;c++)

{

if((c%32)==0)

printf("n");

printf("%c", c);

}

printf("n");

return 0;

}

 

Оператор while

while (вираз) оператор ;

 

Цикл while являє собою скорочений запис для

 

label: if(вираз)

{

оператор;

goto label;

}

 

Приклад:

 

//Wcount.cpp

#include<stdio.h>

main()

{

int counter;

printf("While countn");

counter = 1;

while(counter <= 10)

{

printf("%dn", counter);

counter++;

}

return 0;

}

 

Приклад:

 

//Walpha.cpp

#include <stdio.h>

main()

{

int c;

printf("While alphabetn");

c = 'A';

while(c<='Z')

{

printf("%c", c);

c++;

}

return 0;

}

 

Цикл do - while

  Цикл do - while являє собою скорочений запис для  

Оператор break

Оператор break перериває виконання останнього відкритого оператора while, do, for або switch. Виконання передається на оператор, що знаходиться за перерваним.

Оператор continue

Оператор continue передає керування на початок останнього відкритого оператора while, do або for. Еквівалентно операторові goto bottom, показаному нижче:

 

while(...)

{

...

goto bottom;

...

bottom:;

}

 

Приклад:

 

//Continue.cpp

#include<stdio.h>

main()

{

int count;

printf("nStarting for loop with continuen");

for(count = 1;count<=10;count++)

{

if(count>5) continue;

printf("%dn", count);

}

printf("After for loop, count = %dn", count);

printf("nnStarting for loop with breakn");

for(count=1;count<=10;count++)

{

if(count>5) break;

printf("%dn", count);

}

printf("After for loop, count = %dn", count);

return 0;

}

 

8. Оператор мітки

Це оператор виразу, перед яким знаходиться двокрапка. Він може бути використаний в операторі goto.

 

OUT_HERE: return result;

 


 

Лекція 4. Функції

1. Функції

Функції – це набори з нуля й більше операторів, об’єднаних у виконавчий модуль, що виконує дії, визначені програмістом. Функції викликаються іншими функціями, і, як правило, повертають їм значення (якщо значення, яке повертається, не має тип void). Функції мають кілька різновидів: звичайні, дружні й шаблони.

Оголошення

  // Два аргументи типу double і повертає значення типу double. double Hypotenuse (double a, double b);

Визначення

  inline double Hypotenuse (double a, double b) {

Виклик

Виклик функції виконує код, пов’язаний із нею. Виклик функції виконується двома способами: прямо – за іменем й побічно – через покажчик.

 

c = Hypotenuse (a, b); // Прямо

 

int (*pfii)(int, int) = & Max;

int x, y;

// ...

int m = (*pfii)(x, y); // Через покажчик

 

Виклик функції всі аргументи передає за значенням, тобто вони обчислюються й копіюються в стек. Мають місце два винятки: якщо аргумент є вектором, то у функцію передається тільки адреса першого елемента цього вектора. Якщо аргумент оголошений як посилання, то його значення передається по посиланню, тобто обчислюється його адреса, що потім заноситься в стек.

1.4. Функція main()

Функція main() необхідна всім програмам на С++. Це функція, з якої починається виконання програми. Вона має одну із двох форм аргументів:

 

int main() { /* ... */ }

int main ( int argc, char* argv[] ) { /* ... */ }

 

Остання форма використовується для введення аргументів з оточення, у якому виконується програма. Параметр argc – це кількість аргументів. Параметр argv[] – це вектор покажчиків на char, кожний з яких указує на аргумент. argv[0] – це ім’я, що використовувалося для запуску програми, argv[1] ... argv[argc - 1] – це аргументи.

 

$ magic hat wand

argc = 3

argv[0] = “magic”

argv[1] = “hat”

argv[2] = “wand”

 

Функція main() звичайно повертає в програму оточення код завершення програми за допомогою оператора return. Функція main() не може бути перевантажена, не може мати аргументів зі значеннями за замовчуванням, не може бути викликана користувачем, не може одержати свою адресу, не може бути оголошена inline або static.

1.5. Зв’язок із С

Зв’язок із С дозволяє скомпільовані раніше функції на С, що перебувають в інших файлах, викликати із програм на С++. Здійснюється шляхом оголошення С-функцій із використанням запису extern “C” в одній із представлених нижче форм:

 

extern “C” int system (const char*);

 

extern “C”

{

long atol (const char*);

int atoi (const char*);

double atof (const char*);

}

 

Звичайно в стандартних файлах заголовків С ці оголошення extern “C” ви повинні зробити самостійно, щоб використати оголошені там функції у вашій програмі на С++.

2. Статичні й автоматичні класи пам’яті

Усі змінні, розміщені поза функціями, належать до статичного класу пам’яті, тобто вони існують увесь час, поки виконується програма. Усі змінні, розміщені всередині функцій, за замовчуванням належать до автоматичного класу пам’яті, тобто вони існують тільки під час виконання даної функції. Щоб змінна всередині функції належала до статичного класу пам’яті, у її оголошенні потрібно використати префікс static, що є ключовим словом.

 

Void Dryer (int clothes)

{

static int cling; // Існує стільки ж, скільки й програма

// ...

}

 

За замовчуванням статичні змінні ініціалізуються значенням нуль (або еквівалентним) до їхнього використання й до ініціалізації на етапі виконання (тієї, котра включає вираз). Автоматичні змінні за замовчуванням не ініціалізуються.

3. Статична та зовнішня область дії

Змінні, які належать до статичного класу пам’яті, оголошені поза функціями, звичайно мають зовнішню область дії; тобто змінні, оголошені в одному файлі, можуть бути доступні в іншому файлі, якщо вони оголошені із префіксом extern, що є ключовим словом.

 

// Файл 1

int global;

 

// Файл 2

extern int global; // доступ до global з першого файлу

 

Щоб зробити змінну, яка оголошена поза функцією і належить до статичного класу пам’яті, недоступною з іншого файлу, її потрібно оголосити з використанням префікса static. Ключове слово static обмежує область видимості змінної межами файлу, у якому вона оголошена.

 

// Файл 1

static int electricity; // Локальна у файлі 1

 

// Файл 2

extern int electricity ; // Помилка при зв’язуванні

 

// Файл 2а

int electricity ; // Правильно

 

Область дії electricity з файлу 1 обмежується межами цього файлу. Інша змінна electricity може бути оголошена в будь-якому іншому файлі (файл 2а).

 

4. Регістрові змінні

Регістрові змінні можуть підвищувати швидкість виконання програми при доступі до автоматичних змінних. Вони позначаються за допомогою префікса register, використовуваного при оголошенні.

 

register int i, *pint;

 

Регістрові змінні можуть зберігати будь-який тип даних, який можна розмістити в машинному регістрі. Для інших типів префікс register ігнорується. Регістрові змінні мають обмежені ресурси. Не гарантується, що змінна, оголошена як регістрова, буде поміщена в регістр.

5. Змінні volatile

Змінні volatile звичайно використовуються для обмеження виконуваної компілятором оптимізації використання змінних, які можуть бути змінені ззовні програми.

 

// serialPort – це розташована десь у пам’яті область введення-виведення

 

volatile char* const serialPort = (char*) 0xa400;

char c = *serialPort; // Прочитати послідовний порт

c = *serialPort; // Прочитати знову

 

Без оголошення volatile оптимізуючий компілятор може вилучити друге присвоювання значення змінної с, оскільки з його погляду цій змінній двічі привласнюється те саме значення.

 

6. Рекурсія

Рекурсивною називається функція, яка рекурсивно викликає саму себе.

Приклад:

 

//Factorial.cpp

#include <iostream>

using namespace std;

 

double Factorial(int number)

{

if(number>1)

return number * Factorial(number - 1);

return 1;

}

 

void main()

{

int num;

cout<<"Input a number:n";

cin>>num;

cout<<"Factorial "<<num<<" = "<<Factorial(num)<<endl;

}

 

Приклад:

 

//Recount.cpp

#include <cstdio>

 

void Recount(int top);

 

void main()

{

Recount(10);

printf("n");

}

 

void Recount(int top)

{

if(top>1)

Recount(top-1);

printf("%4d", top);

}

 

Приклад:

 

//Power.cpp

#include <iostream>

#include <cstdlib> //for exit()

 

using namespace std;

 

double power(double x, int n);

 

int main()

{

int index = 3;

double x = 30;

double y = 0.0;

y = power(5.0, 3);

cout<<endl<<"5.0 cubed = "<<y;

cout<<endl<<"3.0 cubed = "<<power(3.0, index);

x = power(x, static_cast<int>(power(2.0, 2)));

cout<<endl<<"x = "<<x;

cout<<endl;

return 0;

}

 

double power(double x, int n)

{

if(n<0)

{

cout<<endl<<"Negative index, program terminated.";

exit(1);

}

if(n)

return x*power(x, n-1);

else

return 1.0;

}

6.1. Взаємно рекурсивні функції

Взаємно рекурсивними називаються функції, які рекурсивно викликають одна одну.

Приклад:

 

//RecFunctions.cpp

#include <cstdio>

 

void A(int C);

void B(int C);

 

void main()

{

A('Z');

puts(""); //Починає новий рядок

}

 

void A(int C)

{

if(C>'A')

B(C);

putchar(C);

}

 

void B(int C)

{

A(--C);

}


 

Лекція 5. Покажчики й посилання

Покажчики

  int i, *pi = &i; // покажчик на int int *ppi = &pi; // покажчик на покажчик на int

Посилання

  double agent = .028; double &bond = agent; //bond посилається на agent

Вектори

  float vf[10]; // вектор з 10 float int vvi[50][8]; // 50 векторів з 8 int кожний

Структури

  struct Call {

Клас

У С++ ключове слово class уводить новий тип даних, тобто є розширенням структурного типу даних.

1.2. Об’єкт

Об’єкт – це змінна типу className, де className – це визначений раніше клас.

1.3. Дані стану

Закриті дані, або змінні екземпляра об’єкта, оголошуються в описі класу й називаються полями даних, даними-членами або просто членами.

1.4. Повідомлення

Повідомлення, які об’єкт може обробляти, вказуються за допомогою прототипів функцій в описі класу. Прототипи функцій містять тип значення, що повертається, ім’я функції та список параметрів. Список параметрів повинен містити типи параметрів і необов’язкові імена параметрів.

Метод

Методи в С++ – це визначення (реалізації) функцій. Прототипи функцій та їхнє визначення разом являють собою повідомлення, які може обробляти об’єкт. У сукупності вони називаються функціями-членами класу. До членів класу належать функції-члени й поля даних.

1.6. Підклас

У С++ підклас називають похідним класом. Його суперклас, або батьківський клас, називають базовим класом.

2. Абстракція, інкапсуляція, успадкування і поліморфізм: чотири основних властивості

2.1. Абстракція

Абстракція – це формування уявлення про якості чи властивості предмета шляхом видалення деяких частковостей або матеріальних об’єктів.

2.2. Інкапсуляція

Інкапсуляція – це результат приховання в (або ніби в) капсулі: вміщення в обмежений простір, ущільнення. В об’єктно-орієнтованих мовах одиниця інкапсуляції – це об’єкт.

Процес успадкування

Процес успадкування – це передача властивості (властивостей): одержання від попередника.

2.4. Поліморфізм

Поліморфізм – це умови, в яких вид має дві морфологічні форми. В об’єктно-орієнтованому програмуванні ця властивість застосовна до повідомлень і їхньої реалізації. Це означає, що окремі повідомлення можуть викликати різні дії на етапі виконання.

Оголошення класу

Оголошення класу вводить новий тип. Воно встановлює обмеження доступу до членів класу. Для цього використовуються такі ключові слова: private, protected і public. За замовчуванням привласнюється private.

Private

Private означає, що члени класу доступні тільки функціям-членам класу й дружнім функціям класу.

Protected

Protected означає, що члени класу доступні лише функціям-членам класу і дружнім функціям, а також функціям-членам похідних класів.

Public

Public означає, що члени класу доступні будь-яким функціям.

 

Оголошення класу схоже на оголошення структури:

 

class Phone

{

int area, exchange, line; //private

protected:

enum HookState {onHook, offHook} handset;

public:

Phone(int a, int e, int l)

{

area = a, exchange = e, line = l;

handset = onHook;

}

int OffHook()

{

return handset = offHook;

}

void GiveDialTone();

long AcceptDigits();

void Ring() const;

 

};

 

//Оголосити змінну класу

Phone home(516, 555, 8858);

 

Оголошення класу може містити оголошення іншого класу. Область видимості вкладених класів обмежується межами класу, в якому вони оголошені.

 

class OuterShell

{

int oa;

public:

int ob;

class InnerSelf

{

int ia;

public:

int ib;

void Vague(OuterShell& o, int n)

{

oa = n; // Помилка: яке оа?

o.oa = n; // помилка: оа - private

o.ob = n; // правильно: ов - public

}

void Later(); // визначена нижче

};

void Vague(InnerSelf& i, int n)

{

ia = n; // Помилка: яке iа?

i.ia = n; // помилка: iа - private

i.ib = n; // правильно: iв - public

}

};

 

InnerSelf shallow; // помилка: поза областю видимості

OuterShell::InnerSelf deep; // правильно

 

// Як визначити функцію-член класу InnerSelf

void OuterShell::InnerSelf::Later(){/* … */}

 

Оголошення класу можуть містити локальні перерахування і переіменування типів typedef.

Оголошення класу можуть бути локальними у функціях. Такі класи не можуть використовувати автоматичні змінні в тих функціях, де вони оголошені.

Inline функції-члени повинні бути визначені в оголошенні класу.

 

void Contrived()

{

int i;

static s;

 

class Local

{

public:

int f(){return i;} // помилка: i - автоматична змінна

int g(){return s;} // правильно: s - статична змінна

};

}

 

Local vacuous; // помилка: Local поза областю видимості

 

Приклад:

 

#include <iostream>

 

using namespace std;

 

class Box

{

public:

Box(double lv=1.0, double bv=1.0, double hv=1.0)

{

cout<<"Constructor called.";

length = lv;

breadth = bv;

height = hv;

}

double Volume()

{

return length * breadth * height;

}

private:

double length;

double breadth;

double height;

};

 

int main()

{

Box Match(2.2, 1.1, 0.5);

Box Box2;

cout<<endl<<"Volume of Match ="<<Match.Volume();

Box2.length = 4.0; // помилка!

cout<<endl<<"Volume of Box2 = "<<Box2.Volume();

cout<<endl;

return 0;

}

 

Приклад:

 

// Fraction.h

// Інтерфейс класу Fraction, що представляє раціональний

//дріб виду чисельник/знаменник.

 

class Fraction

{

public:

Fraction(void){};

Fraction(int aNum, int aDenom):num(aNum), denom(aDenom){};

~Fraction(void){};

private:

int num;

int denom;

// Повертає даний дріб

//з найменшим загальним знаменником

Fraction reduced(void);

public:

 

//Методи доступу

int numerator(void){return num;}

int denominator(void){return denom;}

//Арифметичні методи

Fraction add(Fraction aFraction);

Fraction subtract(Fraction aFraction);

Fraction multiply(Fraction aFraction);

Fraction divide(Fraction aFraction);

//Методи порівняння

int lessthen(Fraction aFraction);

int greaterthen(Fraction aFraction);

int equal(Fraction aFraction);

//Методи перетворення

float asFloat(void);

//Методи друку

void print(void);

};

 

// Fraction.cpp

#include "Fraction.h"

#include <iostream>

 

using namespace std;

 

//Закритий метод

Fraction Fraction::reduced(void)

{

int gcd = 1;

int min = num;

if(num>denom)

{

min = denom;

}

for(int i=1; i<=min; i++)

{

if((num%i == 0) && (denom%i == 0))

{

gcd = i;

}

}

num = num/gcd;

denom = denom/gcd;

return *this;

}

 

//Арифметичні методи

Fraction Fraction::add(Fraction aFraction)

{

Fraction temp(num*aFraction.denom + denom*aFraction.num,

denom*aFraction.denom);

return temp.reduced();

}

 

Fraction Fraction::subtract(Fraction aFraction)

{

Fraction temp(num*aFraction.denom - denom*aFraction.num,

denom*aFraction.denom);

return temp.reduced();

}

 

Fraction Fraction::multiply(Fraction aFraction)

{

Fraction temp(num*aFraction.num, denom*aFraction.denom);

return temp.reduced();

}

 

Fraction Fraction::divide(Fraction aFraction)

{

Fraction temp(num*aFraction.denom, denom*aFraction.num);

return temp.reduced();

}

//Методи порівняння

int Fraction::lessthen(Fraction aFraction)

{

return (num*aFraction.denom < denom*aFraction.num);

}

 

int Fraction::greaterthen(Fraction aFraction)

{

return (num*aFraction.denom > denom*aFraction.num);

}

 

int Fraction::equal(Fraction aFraction)

{

return (num*aFraction.denom == denom*aFraction.num);

}

//Методи перетворення

float Fraction::asFloat(void)

{

return (float)num/denom;

}

//Методи друку

void Fraction::print(void)

{

cout<<num<<"/"<<denom;

}

 

// FractionTest.cpp

#include <iostream>

#include "Fraction.h"

 

using namespace std;

 

int main()

{

Fraction frac1(3,4), frac2(20,23), frac3, frac4;

cout<<"nnFraction test program resultsnn";

cout<<" frac1 = "; frac1.print(); cout<<"n";

cout<<" frac2 = "; frac2.print();

frac3 = frac1.add(frac2);

cout<<"nSum of frac1 and frac2 ="; frac3.print();

cout<<"nn";

cout<<"Accessing methods testn";

cout<<"frac3 numerator ="<<frac3.numerator()<<"n";

cout<<"frac3 denominator ="<<frac3.denominator()<<"n";

cout<<"nComparison methodsn";

if(frac2.greaterthen(frac1))

{

cout<<"frac2 greater then frac1n";

}

if(frac1.lessthen(frac3))

{

cout<<"frac1 less then frac3n";

}

frac4 = frac3;

if(frac4.equal(frac3))

{

cout<<"Have set frac4 equal to frac3n";

}

cout<<"nMore arithmetic methodsn";

cout<<"Difference of frac1 and frac2 = ";

frac1.subtract(frac2).print();

cout<<"nProduct of frac1 and frac2 = ";

frac1.multiply(frac2).print();

cout<<"nQuotient of frac2/frac3 = ";

frac2.divide(frac3).print();

cout<<"n";

return 0;

}

 


Лекція 9. Конструктори і деструктори

Конструктори

Конструктори автоматично викликаються компілятором при оголошенні змінної даного класу, за необхідності перетворень у виразах, аргументах функцій… Усі невіртуальні конструктори базових класів, якщо такі є, викликаються до…  

Конструктори за замовчуванням

  class IntStack {

Деструктори

1) при виході з області видимості; 2) при створенні тимчасових об’єктів для перетворення у виразах або для… 3) коли значення, що повертаються функцією, більше не потрібні;

Покажчики на члени класу

Покажчики на члени класу вказують на нестатичні поля або методи (включаючи віртуальні) будь-якого об’єкта класу.   struct Point

Оголошення

Private – відкриті й захищені члени базового класу в похідному класі стають закритими. Protected – відкриті й захищені члени базового класу в похідному класі стають… Public – відкриті та захищені члени базового класу в похідному класі стають відкритими й захищеними відповідно.

Оголошення доступу

Для перевантажених функцій дозволяють повернути їм первісне обмеження доступу, що вони мали в базовому класі, якщо в усіх них було однакове…   class Base

Стани помилки

int eof(); – повертає ненульове значення, якщо в потоці виявлений символ кінця файлу. int bad ();

Потокове виведення

cout – ostream, зв’язаний зі стандартним пристроєм виведення; cerr – ostream, зв’язаний зі стандартним пристроєм повідомлення про помилки. … 4. Операція вставки

Потокове введення

6. Операція витягу Операція витягу читає послідовність символів із зазначеного потоку. Проміжки…  

Файлове виведення

  ofstream outFile(“myFile”); // спробувати відкрити myFile if(!outFile) // відкриття неможливе

Файлове введення

  ifstream inFile(“myFile”); // спробувати відкрити myFile if(!inFile) // відкриття неможливе

Стани форматування

  skipws Якщо встановлено цей флаг, то порожні проміжки при введенні за допомогою операції << будуть опускатися. …   long flags();

Установка символа-заповнювача

char fill(char);

– установлює символ-заповнювач і повертає попередній символ-заповнювач. За замовчуванням як символ-заповнювач використовується пробіл.

 

ostream& setfill(char);

– те ж, що й потоковий метод fill(), за винятком того, що setfill() – це потоковий маніпулятор.

 

char fill();

– повертає поточний символ-заповнювач.

Установка ширини поля

– установлює мінімальну ширину поля для даного розміру й повертає попередню ширину поля. Нуль означає відсутність мінімуму. Коли при вставці в потік…   int width();

Установка системи числення

ios& oct(ios&); ios hex(ios&); ios& setbase(int);

Шаблони

2. Шаблони функцій Шаблон функції – це оголошення функції, що випереджається специфікацією… Шаблони функцій мають параметри типу, які позначаються ключовим словом class, за котрим іде ідентифікатор.…

Чаленко Борис Миколайович

 

алгоритмізація та програмування процедур обробки інформації

 

 

Комп’ютерна верстка Б.М. Чаленко

Редактор Я.В. Новічкова

Коректор Є.В. Найчук

 

 

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

 

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

 

Друк RISO

Обл.-вид. арк. 4,7

 

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Редакційно-видавничий відділ

Полтавського національного технічного університету

імені Юрія Кондратюка

36601, м. Полтава, просп. Першотравневий, 24

Свідоцтво про внесення суб’єкта видавничої справи

до Державного реєстру видавців, виготівників і розповсюджувачів

видавничої продукції

Серія ДК, №___ від __.__.2008 р.

 

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

 

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Віддруковано з оригінал-макета РВВ ПолтНТУ

 

 

– Конец работы –

Используемые теги: Процедурно-орієнтоване, структурне, програмування0.065

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Процедурно-орієнтоване (структурне) програмування

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Структурная схема системы слежения за временным положением. Обобщенные функциональная и структурная схемы радиотехнических следящих систем
Таким образом, система АРУ необходима для расширения динамического диапазона, чтобы избежать перегрузки каскадов и искажения амплитудной модуляции и… Напряжение задержки Uзад используется для того, что бы повысить уровень…

ЛІНІЙНЕ ПРОГРАМУВАННЯ. Транспортна задача. ЦІЛОЧИСЛОВЕ ПРОГРАМУВАННЯ
Криворізький технічний університет... Кафедра економіки організації та управління підприємствами... МЕТОДИЧНІ ВКАЗІВКИ Кривий Ріг...

Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування
Мета заняття... поглибити і закріпити знання з архітектури МП платформи х і навички його програмування придбати практичні навички у побудові базового застосування під Win з дослідженням параметрів віконних процедур Постановка...

Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування
Мета заняття... поглибити і закріпити знання з архітектури МП платформи х і навички його... придбати практичні навички складання налагодження і виконання програм з використанням структур та АРІ функцій під...

Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування
SSE розширень... Мета заняття... поглибити і закріпити знання з архітектури МП платформи х і навички його програмування...

Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування
Мета заняття... поглибити і закріпити знання з архітектури МП платформи х і навички його... набути практичних навичок складання налагодження і виконання програм з використанням Dll файлів з використанням...

Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування
Мета заняття... поглибити і закріпити знання з архітектури МП платформи х і навички його програмування придбати практичні навички у побудові базового застосування під Win з дослідженням параметрів віконних процедур Постановка...

СИСТЕМА КОМАНД ТА ПРОГРАМУВАННЯ МІКРОКОНТРОЛЕРА КМ1816ВЕ51
СИСТЕМА КОМАНД ТА ПРОГРАМУВАННЯ МІКРОКОНТРОЛЕРА КМ ВЕ... Формати і способи адресації команд...

АРХІТЕКТУРА ТА ПРОГРАМУВАННЯ МІКРОКОНТРОЛЕРІВ
Харківський військовий університет... ЦИФРОВІ ПРИСТРОЇ ТА МІКРОПРОЦЕСОРИ...

Рассмотрим вначале источник питания без преобразо­вателя частоты, структурная схема которого представлена на рис. 2.71
ВТОРИЧНЫЕ ИСТОЧНИКИ ПИТАНИЯ Вторичные источники питания являются одними из...

0.033
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам