- •Теоретичні відомості
- •2.Завдання до лабораторної роботи
- •Лабораторна робота № 3 алгоритми лінійної структури,
- •Теоретична частина
- •Завдання до лабораторної роботи
- •Лабораторна робота № 4
- •Теоретична частина
- •1. Якщо - то
- •Блок-схема:
- •Якщо - то – інакше
- •Блок-схема:
- •Блок-схема
- •Лабораторна робота № 5
- •Теоретична частина
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Лабораторна робота №6 Робота з вказівниками
- •1.Теоретична частина
- •2.Завдання до лабораторної роботи
- •Лабораторна робота №7 Основні поняття об’єктно-орієнтованого програмування
- •1.Теоретична частина
- •2. Завдання до лабораторної роботи
2.Завдання до лабораторної роботи
Вести символьний масив. Знайти адреси першого і останнього його елементів і визначити його розмір в байтах.
Скласти програму, що здійсню переписування рядка символів в зворотному порядку.
Визначити адреси елементів масиву чисел розмірністю 4 на 4, що знаходяться на головній діагоналі.
Індивідуальне завдання
1 |
Вивести адреси елементів масиву 4 на 4 , що знаходяться нижче головної діагоналі. |
2 |
Сформувати масив з мінімальних елементів кожного стовпця масиву 4 на 4 і знайти адресу його елементів |
3 |
Вивести адреси елементів масиву 4 на 4 , що знаходяться вище головної діагоналі. |
4 |
Сформувати масив з максимальних елементів кожного стовпця масиву 4 на 4 і знайти адресу його елементів |
5 |
Знайти адреси нульових елементів масиву 4 на 4 . |
6 |
Поміняти місцями перший і останній елемент масиву 4 на 4 і знайти його розмір в байтах. |
7 |
Сформувати масив з мінімальних елементів кожного рядка масиву 4 на 4 і знайти адресу його елементів |
8 |
Вивести адреси елементів масиву 4 на 4 з парною сумою індексів |
9 |
Знайти максимальний елемент масиву 4 на 4 і сформувати новий масив, кожен елемент якого –добуток елементу початкового масиву на макимальний Вивести адреси елементів одержного масиву |
Лабораторна робота №7 Основні поняття об’єктно-орієнтованого програмування
1.Теоретична частина
Об'єкт - це абстрактна сутність, наділена характеристиками об'єктів навколишнього реального світу. Створення об'єктів і маніпулювання ними - це зовсім не привілей мови C++, а скоріше результат методології програмування, що втілює в кодових конструкціях опис об'єктів і операції над ними. Кожен об'єкт програми, як і будь-який реальний об'єкт, відрізняється власними атрибутами і характерною поведінкою. Об'єкти можна класифікувати по різних категоріях. Кожен клас займає визначене місце в ієрархії класів. Таким чином, будь-який клас визначає деяку категорію об'єктів, а всякий об'єкт є екземпляр деякого класу.
Об’єктно-орієнтоване програмування (ООП) — це методика, що концентрує основну увагу програміста на зв'язках між об'єктами, а не на деталях їхньої реалізації. Основні принципи ООП:
інкапсуляція;
спадкування;
поліморфізм;
створення класів і об'єктів)
Інкапсуляція є об'єднання в єдиному об'єкті даних і кодів, що оперують з цими даними. У термінології ООП дані називаються членами даних (data members) об'єкта, а коди - об'єктними методами або функціями-членами (methods, member functions).
Інкапсуляція дозволяє в максимальному ступені ізолювати об'єкт від зовнішнього оточення. Вона істотно підвищує надійність розроблюваних програм, тому що локалізовані в об'єкті функції обмінюються з програмою порівняно невеликими обсягами даних, причому кількість і тип цих даних звичайно ретельно контролюються. У результаті заміна або модифікація функцій і даних, інкапсульованих в об'єкт, як правило, не спричиняє негативних наслідків для програми в цілому (з метою підвищення захищеності програм в ООП майже не використовуються глобальні змінні).
Іншим достатньо важливим наслідком інкапсуляції є легкість обміну об'єктами, переносу їх з однієї програми в іншу.
Запозичена в природи ідея спадкування вирішує проблему модифікації поведінки об'єктів і додає ООП виняткову силу і гнучкість. Спадкування дозволяє, практично без обмежень, послідовно будувати і розширювати класи, створені розробниками. Починаючи з найпростіших класів, можна створювати похідні класи по зростаючій складності, що не тільки легкі в налагодженні, але і прості за внутрішньою структурою.
Послідовне проведення в життя принципу спадкування, особливо при розробці великих програмних проектів, добре погоджується з технікою спадного структурного програмування (від загального до частки), і багато в чому стимулює такий підхід. При цьому складність коду програми в цілому істотно скорочується. Похідний клас (нащадок) успадковує усі властивості, методи і події свого базового класу („батька”) і всіх його попередників в ієрархії класів.
При спадкуванні базовий клас обростає новими атрибутами й операціями. У похідному класі звичайно з'являються нові члени даних, властивості і методи. При роботі з об'єктами програміст звичайно підбирає найбільш підходящий клас для рішення конкретної задачі і створює одного або декількох нащадків від нього, що здобувають здатність робити не тільки те, що закладено в „батьку”. Дружні функції дозволяють похідному класові одержати доступ до всіх членів даних зовнішніх класів.
Крім того, похідний клас може перевантажувати (overload) наслідувані методи в тому випадку, коли їхня робота в базовому класі не пасує нащадкові. Використання перевантаження в ООП усіляко заохочується, хоча в прямому розумінні значення цього слова перевантажень звичайно уникають. Говорять, що метод перевантажений, якщо він асоціюється з більш ніж одною однойменною функцією.
Поліморфізм - це властивість родинних об'єктів (тобто об'єктів, класи яких є похідними від одного „батька”) поводитися по-різному в залежності від ситуації, що виникає в момент виконання програми. У рамках ООП програміст може впливати на поведінку об'єкта тільки побічно, змінюючи вхідні в нього методи і додаючи „нащадкам” відсутні в „батька” специфічні властивості.
Для зміни методу необхідно перевантажити його в „нащадку”, тобто оголосити в „нащадку” однойменний метод і реалізувати в ньому потрібні дії. У результаті в об'єкті-батьку й об'єкті-нащадку будуть діяти два однойменних методи, що мають різну кодову реалізацію і, отже, що додають об'єктам різне поведінку. Наприклад, в ієрархії родинних класів геометричних фігур (точка, пряма лінія, квадрат, прямокутник, окружність, еліпс і т.д.) кожен клас має метод Draw, що відповідає за належний відгук на подію з вимогою намалювати цю фігуру.
Завдяки поліморфізмові, „нащадки” можуть перевантажувати загальні методи «батька» для того, щоб реагувати специфічним образом на ту саму подію.
Класи в C++
Перед тим як працювати з класом, програма повинна його оголосити. Розглянемо синтаксис оголошення класу на прикладі класу circle:
class Circle {
public:
Circle () ;
void SetRadius(void) ;
void GetRadius(void) ;
~Circle () ;
private:
void CalculateArea(void);
int radius;
int color;
};
Ключове слово class показує компілятору, що все, що знаходиться у фігурних дужках ({}) належить оголошенню класу. (Не забувайте ставити крапку з комою наприкінці оголошення.) Оголошення класу містить оголошення елементів даних (наприклад, int radius) і прототипи функцій-елементів класу. В оголошенні класу circle містяться наступні елементи даних:
int radius;
int color;
Оголошення також містить п'ять прототипів функцій-елементів:
Circle();//конструктор
void SetRadius(void) ;
void GetRadius(void) ;
~Circle () ;//деструктор
void CalculateArea(void);
Прототипи функцій і оголошення елементів даних включаються в оголошенні класу в розділи public (відкритий) або private (закритий). Ключові слова public і private говорять компілятору про приступність елементів-функцій і даних. Наприклад, функція SetRadius() визначена в розділі public, і це означає, що будь-яка функція програми може викликати функцію SetRadius(). Функція CalculateArea() визначена в розділі private, і цю функцію можна викликати тільки в коді функцій-елементів класу Circle.
Аналогічно, оскільки елемент даних radius оголошений у розділі private, прямий доступ до нього (для установки або читання його значення) можливий тільки в коді функцій-елементів класу Circle. Якби ви оголосили елемент даних radius у розділі public, то будь-яка функція програми мала би доступ (для читання і присвоювання) до елемента даних radius.
Приклад: Заповнення і вивід платіжної відомості
include <iostream>
#include <cstring>
using namespace std;
class employee {
char name[80]; // private by default
public:
void putname(char *n); // these are public
void getname(char *n);
private:
double wage; // now, private again
public:
void putwage(double w); // back to public
double getwage();
};
void employee::putname(char *n)
{
strcpy(name, n);
}
void employee::getname(char *n)
{
strcpy(n, name);
}
void employee::putwage(double w)
{
wage = w;
}
double employee::getwage()
{
return wage;
}
int main()
{
employee ted;
char name[80];
ted.putname("Ted Jones");
ted.putwage(75000);
ted.getname(name);
cout << name << " makes $";
cout << ted.getwage() << " per year.";
return 0;
}