- •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)
21).Охарактеризуйте віртуальні функції. Приклади.
Чергова модифікація базового класу призводить до несподіваних наслідків. Ця модифікація полягає в зміні специфікатора функції-члена базового класу. Ми (вперше!) використовуємо специфікатор virtual в оголошенні функції. Функції, оголошені з специфікатором virtual, називаються віртуальними функціями. Введення віртуальних функцій в оголошення базового класу (всього лише один специфікатор) має такі значні наслідки для методології об'єктно-орієнтованого програмування, що ми зайвий раз наведемо модифіковане оголошення класу A:
class A
{
public:
virtual int Fun1(int);
};
Один додатковий специфікатор в оголошенні функції і більше ніяких (поки ніяких) змін в оголошеннях похідних класів. Як завжди, дуже проста функція main (). У ній ми визначаємо покажчик на об'єкт базового класу, налаштовуємо його на об'єкт похідного типу, після чого за вказівником ми викликаємо функцію Fun1 ():
void main ()
{
A *pObj;
A MyA;
AB MyAB;
pObj = &MyA;
pObj->Fun1(1);
AC MyAC;
pObj = &MyAC;
pObj->Fun1(1);
}
Якби не специфікатор virtual, результат виконання вираження виклику
pObj->Fun1(1);
був би очевидний: як відомо, вибір функції визначається типом покажчика.
Однак специфікатор virtual змінює всю справу. Тепер вибір функції визначається типом об'єкта, на який налаштовується покажчик базового класу. Якщо в похідному класі оголошується нестатичні функція, у якої ім'я, тип значення, що повертається і список параметрів збігаються з аналогічними характеристиками віртуальної функції базового класу, то в результаті виконання вираження виклику викликається функція-член похідного класу.
Відразу треба зазначити, що можливість виклику функції-члена похідного класу за вказівником на базовий клас не означає, що з'явилася можливість спостереження за об'єктом "зверху вниз" із покажчика на об'єкт базового класу. Невіртуальна функції-члени та дані, як і раніше недоступні. І в цьому можна дуже легко переконатися. Для цього достатньо спробувати зробити те, що ми вже одного разу виконали - викликати невідому в базовому класі функцію-член похідного класу:
//pObj->Fun2(2);
//pObj->AC::Fun1(2);
Результат негативний. Покажчик, як і раніше, налаштований лише на базовий фрагмент об'єкта похідного класу. І все ж виклик функцій похідного класу можливий. Колись, в розділах, присвячених опису конструкторів, нами було розглянуто перелік регламентних дій, які виконуються конструктором в ході перетворення виділеного фрагмента пам'яті в об'єкт класу. Серед цих заходів згадувалася ініціалізація таблиць віртуальних функцій.
Наявність цих самих таблиць віртуальних функцій можна спробувати виявити за допомогою операції sizeof. Звичайно, тут все залежить від конкретної реалізації, але, по крайней мере, в версії Borland C + + об'єкт-представник класу, який містить оголошення віртуальних функцій, займає більше пам'яті, ніж об'єкт аналогічного класу, в якому ті ж самі функції оголошені без специфікатора virtual.
cout << "Размеры объекта: " << sizeof(MyAC) << "…" << endl;
