Алгебра логіки як розділ математики
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
ику р1 присвоєна адреса першого елементу масиву. Щоб отримати доступ до 5-го елементу масиву, треба виконати один з двох операторів
str [4] або
* (p1+4)
Як і звичайні змінні, вказівники можна розміщати в масивах. Оголошення масиву, що складається з 10 змінних, виглядає наступним чином
int *x [10];
Щоб присвоїти адресу цілочисельної змінної var третьому елементу масиву вказівників, виконуємо оператор
x [2] =&var;
Щоб видобути значення змінної використовуючи вказівник розіменування
*x [2]
Масив вказівників передається у функцію в звичайний спосіб-достатньо вказати його імя в якості аргументу.
Приклад
void display_array (int *q [])
int t;
for (t=0; t<10; t++)
printf ("%d", *q [t]);
Іноді вказівник може посилатись на інший вказівник, який в свою чергу містить адресу змінної. Така адресація називається непрямою. Змінна, що являє собою вказівник на вказівник, записується з додатковою *.
Приклад
#include
int main (void) {
int x, *p, **q;
x = 10;
P = &x;
q = &p;
printf ("%d", **q) // вивід числа х
Незважаючи на те, що функція не є змінною, вона також розташовується в памяті, і як наслідок, її адресу можна присвоювати вказівнику. Ця адреса вважається точкою входу в функцію. Саме вона використовується при її виклику. Це дозволяє також передавати функції в якості аргументів іншим функціям.
Будь-яка змінна є іменованою областю памяті, яка резервується під час компіляції, а вказівники служать лише псевдонімами для областей памяті, до яких в разі потреби можна звернутись просто по імені. Справжня цінність вказівників виявляється тоді, коли для зберігання даних в процесі виконання програми виділяється неіменована область памяті. У цьому випадку вказівники є єдиним засобом доступу до цієї памяті. У С++ є два способи виділити память: з допомогою бібліотечної функції malloc або з допомогою оператора new
Прототип функції виглядає наступним чином
void *malloc (size_t кількість байтів)
Наприклад
char *p;
р= malloc (lOOO); /*виділити 1000 байт *
або
int *p;
*p= (int*) malloc (50*sizeof (int));. виділити память під 50 цілих чисел
Функція free є протилежністю malloc - вона звільняє раніше зайняту динамічну область памяті. Прототип функції виглядає наступним чином
void free (void *p)
Синтаксис використання оператора new
int *p=new int
Вираз new int повідомляє програмі, що необхідна нова область для збереження даних типу int. Оператор new аналізує тип, щоб знати, скільки байт необхідно виділити. Потім він відшукує область памяті і повертає адресу. Далі адреса присвоюється змінній р, яка оголошується вказівником на тип int. Тепер р є адресою, а *р - значенням, що зберігається за цією адресою.
Звільнити зарезервований блок памяті можна з допомогою оператора delete
delete *p;
Цим очищується область памяті, але сам вказівник не знищується і його можна використовувати повторно, наприклад, для вказування на іншу область памяті.
2. Завдання до лабораторної роботи
- Вести символьний масив. Знайти адреси першого і останнього його елементів і визначити його розмір в байтах.
- Скласти програму, що здійсню переписування рядка символів в зворотному порядку.
- Визначити адреси елементів масиву чисел розмірністю 4 на 4, що знаходяться на головній діагоналі.
Лабораторна робота №7
Основні поняття обєктно-орієнтованого програмування
1. Теоретична частина
Обєкт - це абстрактна сутність, наділена характеристиками обєктів навколишнього реального світу. Створення обєктів і маніпулювання ними - це зовсім не привілей мови C++, а скоріше результат методології програмування, що втілює в кодових конструкціях опис обєктів і операції над ними. Кожен обєкт програми, як і будь-який реальний обєкт, відрізняється власними атрибутами і характерною поведінкою. Обєкти можна класифікувати по різних категоріях. Кожен клас займає визначене місце в ієрархії класів. Таким чином, будь-який клас визначає деяку категорію обєктів, а всякий обєкт є екземпляр деякого класу.
Обєктно-орієнтоване програмування (ООП) - це методика, що концентрує основну увагу програміста на звязках між обєктами, а не на деталях їхньої реалізації. Основні принципи ООП:
- інкапсуляція;
- спадкування;
- поліморфізм;
- створення класів і обєктів)
Інкапсуляція є обєднання в єдиному обєкті даних і кодів, що оперують з цими даними. У термінології ООП дані називаються членами даних (data members) обєкта, а коди - обєктними методами або функціями-членами (methods, member functions).
Інкапсуляція дозволяє в максимальному ступені ізолювати обєкт від зовнішнього оточення. Вона істотно підвищує надійність розроблюваних програм, тому що локалізовані в обєкті функції обмінюються з програмою порівняно невеликими обсягами даних, причому кількість і тип цих даних звичайно ретельно контролюються. У результаті заміна або модифікація функцій і даних, інкапсульованих в обєкт, як правило, не спричиняє негативних наслідків для програми в цілому (з метою підвищення захищеності програм в ООП майже не використовуються глобальні змінні).
Іншим достатньо важливим наслідком інкапсуляції є легкість обміну обєктами, переносу їх з однієї програми в іншу.
Запозичена в природи ідея спадкування вирішує проблему модифікації поведінки обєктів і додає ООП виняткову силу і гнучкість. Спадкування дозволяє, практично без обмежень, послідовно будувати і розширювати класи, ств