
- •1.Охарактеризуйте розвиток структуризації у мовах програмування. Технології програмування.
- •2. Охарактеризуйте особливості та переваги об’єктно-орієнтованого програмування, використовуючи його базові поняття та терміни.
- •3.Охарактеризуйте такі поняття об’єктно-орієнтованої парадиґми, як клас, об’єкт, повідомлення та метод.
- •Означте такі базові властивості об’єктно-орієнтованого програмування як абстрагування, наслідування, інкапсуляція та поліморфізм.
- •Охарактеризуйте поняття абстрагування при створенні класу об’єктів. Проаналізуйте відмінності між поняттям класу та об'єкту.
- •6. Специфікація представлення та функціональна специфікація класів.
- •8.Опишіть такий агрегатний тип даних як масив. Приклади
- •10.Охарактеризуйте поняття ідентифікації об’єктів. Проаналізуйте способи ідентифікації об’єктів.
- •11. Об'єкти з точки зору концепцій інкапсуляції і абстракції.
- •12. Проаналізуйте структуру опису та реалізації класу: компоненти-дані і компоненти-функції.
- •13. Проаналізуйте особливості доступу до компонентів об’єкта (використання специфікаторів public, private, protected).
- •14. Ініціалізація об’єктів (конструктори). Опис конструкторів та порядок їх виклику.
- •15. Опишіть процес руйнування об’єкта (деструктори).
- •21).Охарактеризуйте віртуальні функції. Приклади.
- •Проаналізуйте поняття «час життя» об'єкта та його «область видимості».
- •23).Класи пам’яті. Використання автоматичної, статичної та динамічної пам’яті для розміщення об’єктів.
- •24). Розкрийте суть проблеми "висячих" посилань і “сміття”.
- •1)Цілі, 2)раціональні (із плаваючою крапкою),3) символьні;4) рядкові.
- •1) Константи цілого типу
- •2) Константи раціонального типу
- •3) Символьні константи
- •Керуючі коди
- •4) Рядкові константи
- •Перераховуваний тип
- •30. Охарактеризуйте особливості inline-функцій та inline-методів класів.
- •33. Опишіть такі аґреґатні типи даних, як структура і об’єднання, їх основні відмінності.
- •34. Охарактеризуйте поняття вказівника і посилання. Їх основні відмінності.
- •Типові обмеження та помилки програмування при роботі з посиланнями.
- •35. Ініціалізація вказівників. Операції над ними.
- •Операції з вказівниками.
- •Типові помилки програмування при роботі з вказівниками.
- •36. Охарактеризуйте зв'язану організацію пам'яті та використання вказівників у програмах.
- •37.Дайте аналіз динамічним структурам об’єктів на прикладі асоціативних структур даних.
- •38.Проаналізуйте такі динамічні структури об’єктів як лінійні списки.
- •39Дайте оцінку такій динамічні структури об’єктів як черги, стеки та деки.
- •40.Опишіть та дайте приклади використання зв’язаної організації пам’яті для реалізації рекурсивних структур.
- •48). Використання маніпуляторів при вводі-виводі даних.( незнайдено повністю)
- •49). Способи форматування даних при використанні потоків.
- •51). Роз’ясніть поняття модуля як програмного еквівалента класу об’єктів.
- •52). Розясніть основні концепції модульного програмування.(додатково у 51)
35. Ініціалізація вказівників. Операції над ними.
1. Присвоєння вказівнику адреси існуючого об’єкта
а) за допомогою взяття адреси
int a=5;
int *p=&a;
або int *p(&a);
б) за допомогою іншого ініціалізованого вказівника. У випадку вказівника на вказівник, перший вказівник містить адресу другого вказівника, який в свою чергу містить адресу комірки пам’яті, в якій міститься деяке значення int **pp=&p;
в) за допомогою імені масиву або функцій, які трактуються як вказівники
int b[10];
int *t=b;
void f(int a) {…};
void (*pf) (int);
pf=f;
2. Присвоєння вказівнику адреси ділянки пам’яті явним чином:
char *vp=(char*)0xB8000000;
3. Присвоєння вказівнику порожнього значення
int *s = NULL;
int*r = 0; як ціла константа
4. Виділення ділянки динамічної пам’яті і присвоєння її адреси вказівнику
С++ : int *n=new int;
int *m=new int(10); // ініціалізатор для динамічної змінної, на яку вказує m
або *m=10;
int *q=new int [10]; // масив
....
delete n; delete m;
delete q[];
C : int *n = (int *) malloc;
(sizeof (int));
free(n);
Приклад: int *(*p[10]) (); // масив і 10 вказівників на функції типу int *
Операції з вказівниками.
Над вказівниками визначені арифметичні операції та операції порівняння (табл.).
Операція |
Приклад і пояснення |
==, !=, >=, <=, >, < |
Порівняння значення двох вказівників (адреси, на які вони вказують). Наприклад, якщо вказівники вказують на одне і те ж саме дане, то результатом vk1 == vk2 буде істина, інакше – фальш |
– |
vk1 – vk2. Використовується для визначення кількості елементів, які наявні між двома вказівниками |
+, – |
vk1 + k, vk1 – k. Знаходить вказівник, який зміщений відносно даного на k одиниць. |
++ / -- |
Інкремент / Декремент |
Докладніше див. Лабораторна робота 4 (розділ – робота з вказівниками)
Операція розадресації (розіменування) – призначена для доступу до значення, адреса якого зберігається у вказівнику.
char a;
char *p=new char;
*p=’s’;
a=*p;
На одну і ту саму ділянку пам’яті можуть вказувати різні вказівники різного типу і операція розадресації дасть різні результати.
# include <stdio.h>
main ()
{
unsigned long int A=0xcc77ffaa;
unsigned short int *pint = (unsigned short int*) &A;
unsigned char *pchar = (unsigned char *)&A;
printf ("| %x | %x | %x |", A, *pint, *pchar);
}
На екрані: |cc77ffaa|ffaa|aa|
Молодші розряди йдуть в молодші адреси (байти)
Типові помилки програмування при роботі з вказівниками.
Використання арифметичних дій з вказівниками, що посилаються не на елементи масиву.
Віднімання або порівняння двох вказівників, що посилаються на елементи не одного масиву.
Вихід за межі масиву при використанні арифметичних дій з вказівниками.
Присвоювання вказівника одного типу вказівнику іншого типу (відмінного від void*) викликає синтаксичну помилку.
Розіменування вказівника на void*.