Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДЕК ооп_відповді.doc
Скачиваний:
61
Добавлен:
12.02.2016
Размер:
240.64 Кб
Скачать

3Білет – 24 пит.

4*5 = 20

15*3 = 45

5*2 = 10

Разом –= 75 балів

Кількість білетів - 13

Запитання вартістю 1 бали (найнижча складність 39 пит.)

  1. Чим задається розмір об’єкта класу?

  • Розмір об’єкта класу в пам’яті визначається сумою розмірів членів класу.

  • Розмір об’єкта класу в пам’яті визначається сумою розмірів членів-даних класу.

  • Розмір об’єкта класу в рівний розміру посиланню на тип int.

  • Розмір об’єкта класу в рівний розміру вказівника на об’єкт класу.

  1. Якщо оголосити клас Catіз закритим членомitsAge, а потім створити два об’єкти класуCatз іменамиFrisckyіBoots, то чи зможе об’єктBootsотримати доступ до змінної-членуitsAgeоб’єктаFriscky?

  • Так. Закриті члени доступні для членів-функцій класу і різні екземпляри одного класу можуть звертатись до даних один одного.

  • Так. Оскільки, об’єкт має доступ до усіх членів класу.

  • Ні

  • Ні. Оскільки, об’єкт має доступ лише до закритих членів класу.

  1. Для чого оголошувати об’єкт постійним, якщо це обмежує його можливості?

  • Через неможливість розміщення об’єкта в динамічній пам’яті.

  • Через можливість зміни об’єкта в тілі функції.

  • Через неможливість зміни об’єкта в тілі функції.

  1. Для чого потрібні вказівники, якщо із посиланнями легше працювати?

  • Вказівники мають більші можливості стосовно доступу до членів класу.

  • Посилання не можуть бути нульовими, і їх заборонено переозначувати.

  • Вказівники потребують негайної ініціалізації при створенні

  • Посилання не контролюються при передаванні в тіло функції.

  1. Якщо повернення об’єкту в якості посилання є небезпечним, то чому б завжди не повертати результат за значенням?

  • Повернення за значенням не дає можливості повернути усі види об’єктів з функції.

  • Механізм повернення за значенням працює в області далекої пам’яті.

  • Повернення за посиланням економить пам'ять і програма виконується швидше.

  • Повернення за посиланням дозволяє повернути з функції значення різних типів.

  1. Для чого використовувати аргументи із значеннями по замовчуванню якщо можна перевантажити функцію?

  • Легше зрозуміти роботу функції, яка використовує значення по замовчуванню.

  • Швидше передаються аргументи в тіло функції.

  • Швидше звільняється стек після завершення роботи функції

  • Не переповнюється стек при передаванні значень в тіло функції.

  1. Чи може перевантажена функція містити аргументи із значеннями замовчуванню?

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

  • Так, але лише при перевантаженні шаблонів функцій.

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

  • Ні, таке перевантаження заборонено правилами мови.

  1. Чому одні функції-члени реалізуються в описі класу, а інші ні?

  • Реалізація функції-члена за межами оголошення класу робить її вбудованою.

  • Реалізація функції-члена в середині оголошення класу робить її вбудованою.

  • Реалізація функції-члена в середині оголошення класу робить постійним вказівник this.

  • Жодної відмінності між таким реалізаціями функції члена не існує

  1. Чи наслідуються дані і функції-члени базового класу в похідних класах? Якщо клас Dogпоходить від класуMammal, а класMammal– від класуAnimals, то чи унаслідує класDogдані і функції класуAnimals?

  • Ні. Наслідування в похідних класах передбачає наслідування виключно з власних базових класів, які є проміжними в ієрархія наслідування. Це означає, що клас Dogмає право наслідувати тільки члени класуMammalі не нічого не може наслідувати з класуAnimals.

  • Ні. Оскільки потрібні спеціальні для продовження наслідування модифікатори.

  • Так. Оскільки наслідування продовжується безкінечно, всі похідні класи унаслідують усі допустимі члени усіх базових класів.

  • Так. Оскільки наслідування продовжується безкінечно, всі похідні класи унаслідують усі допустимі члени безпосередньо базових класів.

  1. Якщо клас Dogпоходить від класуMammal, а класMammal– від класуAnimal, і Mammal переозначує функцію класу Animal, то яку версію функції отримає клас Dog – базову (відAnimal) чи переозначену (відMammal)?

  • Якщо Dogунаслідується від класуMammal, то він отримає функцію в такому вигляді в якому вона існує в класіAnimal, тобто первісну.

  • Жодної не отримає, оскільки таке переозначення є забороненим.

  • Якщо Dog унаслідується від класу Mammal, то він отримає функцію в такому вигляді в якому вона існує в класі Mammal, тобто переозначену.

  1. Чи можна в похідному класі оголосити закриту функцію, яка в базовому класі оголошена відкритою?

  • Так, похідний клас може переозначити метод батьківського і зробити його закритим.

  • Так, але якщо в похідному класі буде дві версії функції, одна - відкрита, а інша -закрита.

  • Ні, похідний клас не може переозначити метод, який у батьківському класі оголошений з іншим модифікатором.

  • Ні, похідний клас не може переозначити відкритий метод батьківського класу.

  1. Чому б не зробити всі функції класу віртуальними?

  • Віртуальним функціям не передається вказівник this.

  • Віртуальні функції не наслідуються.

  • До віртуальних функцій не можна застосувати оператор дозволу дії.

  • Оголошення функції віртуальною призводить до витрат пам’яті.

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

  • Перевагою віртуальних функцій є раннє зв’язування і прискорення процедури виклику.

  • Перевагою віртуальних функцій є уникнення визначення типу об’єкта і прискорення виконання програми.

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

  • Переваги не існує

  1. Що поганого в автоматичному приведенні типів об’єктів?

  • Якщо програміст застосовує приведення типів для того, щоб обійти закладений в С++ строгий контроль за типами даних, то це говорить про серйозні недоліки в структурі програми, які протирічать ідеології С++.

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

  • Автоматичне приведення не є технологією С++, а тому компілятор повинен компілювати фрагмент коду, як код мови С.

  • Автоматичне приведення є операціями пізнього зв’язування, що суттєво сповільнює виконання програми.

  1. Коли деструктор повинен бути оголошений віртуальним?

  • Завжди, якщо клас не буде використовуватись як базовий для інших класів.

  • Завжди, якщо клас не буде використовуватись як елемент масиву.

  • Завжди, якщо клас буде володіти властивістю дружності.

  • Завжди, якщо клас буде вкладеним в інший клас.

  • Завжди, якщо клас буде використовуватись як базовий для інших класів.

  1. Для чого використовувати статичні члени, якщо є глобальні.

  • Існують обмеження у передавання глобальних змінних за посиланням у тіло функції.

  • Статичні члени класу швидше від глобальних передаються за адресою у тіло функції.

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

  • Робота із статичними змінними є швидшою за роботу з глобальними.

  1. В чому відмінність потоків С++ від функції printf()?

  • Потоки не підтримують роботи з класами.

  • Потоки не підтримують роботи з помилками консольного вводу/виводу.

  • Функція не може прийняти змінної кількості параметрів.

  • Функція не здійснює контроль за типом виведених даних.

  1. Для чого клас оголошується абстрактним?

  • Створення чисто віртуальних функцій дає змогу уникнути несанкціонованого створення об’єктів даного класу.

  • Для обох приведених випадків.

  • Створення абстрактного класу дає змогу побудувати єдиний інтерфейс доступу через посилання на абстрактний клас.

  1. Для чого використовуються анонімні простори імен?

  • Для локалізації області дії змінною в межах даного файлу.

  • Для надання доступу до змінної з інших файлів проекту.

  • Для розмішення даних в одній ділянці пам’яті

  • Анонімні простори імен не мають практичного використання.

  1. Для чого використовувати шаблони, якщо можна використовувати макроси?

  • Використання шаблонів прискорює виконання програми, а макросів - сповільнює.

  • Шаблони прискорюють процес компіляції програми.

  • Шаблони здійснюють перевірку типів.

  • Макроси здіййснюють перевірку типів.

  1. В чому різниця між параметричним (узагальненим) типом функцій шаблона і параметром звичайної функції?

  • Узагальнений тип дозволяє виконувати тільки окремі дії з параметрами.

  • Функція шаблону дозволяє за допомогою параметра шаблону встановлювати тип параметра, який передається функції.

  • При передаванні аргументу екземпляру шаблону функції для заміщення параметра узагальненого типу його тип не перевіряється

  • Різниці немає.

  1. Коли потрібно використовувати шаблони, а коли наслідування?

  • Використовуйте шаблони, коли поведінка класу є змінною за виключенням типу елемента, з яким працює клас.

  • Використовуйте шаблони, коли поведінка класу є постійною за виключенням типу елемента, з яким працює клас.

  • Використовуйте наслідування, коли поведінка класу є постійною за виключенням значення елемента, з яким працює клас.

  • Використовуйте наслідування, коли поведінка класу є постійною.

  1. Коли використовувати загальні дружні класи шаблону?

  • У випадках, коли кожен екземпляр, незалежно від типу, повинен бути дружнім цьому класу.

  • У випадках, коли кожен екземпляр, залежно від типу, повинен бути дружнім цьому класу.

  • У випадках, коли кожен екземпляр, залежно від типу, повинен бути дружнім до цілого дерева наслідування шаблонів, яке містиь шаблон, по відношенюю до якого і задана властивість дружності.

  • У випадках, коли кожен екземпляр, залежно від типу, повинен бути дружнім до цілого дерева наслідування класів, яке містиь клас, по відношенюю до якого і задана властивість дружності.

  1. Коли використовувати дружні класи шаблону і функції, специфічні для даного типу?

  • Коли між двома класами необхідно встановити відношення за принципом багато-до-одного.

  • Коли між двома класами необхідно встановити відношення за принципом багато-до-багато.

  • Коли між двома класами необхідно встановити відношення за принципом один-до-багато.

  • Коли між двома класами необхідно встановити відношення за принципом один-до-одного.

  1. Які існують два типи стандартних контейнерів?

  • Послідовні і паралельні контейнери.

  • Паралельні і асоціативні контейнери.

  • Послідовні і асоціативні контейнери.

  • Паралельні і множинні контейнери.

  • Множинні і асоціативні контейнери.

  • Множинні і послідовні контейнери.

  1. Якими явно визначеними атрибутами повинен володіти клас для того, щоб його можна було використовувати зі стандартними контейнерами?

  • Конструктор без параметрів.

  • Конструктор без параметрівта копії.

  • Конструктори без параметрів та копії і перевантажений оператор присвоєння.

  • Конструктори з параметрами та копії і перевантажений оператор присвоєння.

  • Конструктори з параметрами та копії і перевантажений оператор приведення.

  1. Навіщо турбуватись про передавання виключень? Чому б не обробляти помилки там,

де вони виникають?

  • Передавання виключення дозволить централізувати обробку помилок.

  • Передавання виключення дозволить уникнути обробки помилок.

  • Передавання виключення дозволить звільнити динамічну пам’ять.

  • Передавання виключення дозволить прискорити звільнення стеку.

  1. Для чого створювати об’єкт при генерації та обробці виключень? Чому б не передавати тільки номер помилки (error code)?

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

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

  • Використання статичних об’єктів для генерації виключень дає можливість ефективніше керувати об’ємом пам’яті.

  • Використання об’єктів дає змогу уникнути ситуації непередбачених вкиключень.

  • Використання об’єктів дає змогу уникнути ситуації неперехоплених вкиключень

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

  • Так, при цьому уникається небезпеки, що при прокрутці стеку деякі об’єкти випадково можу залишитися в динамічній пам’яті, що приведе до її витоку.

  • Так, але треба пам’ятати про небезпеку, що при прокрутці стеку деякі об’єкти випадково можу залишитися в динамічній пам’яті, що приведе до її витоку.

  • Ні, це заборонено стандартом мови.

  • Ні, оскільки в цьому випадку виключення будуть трактуватись як неперхоплені.

  • Ні, оскільки в цьому випадку виключення будуть трактуватись як непередбачені.

  1. Скільки статичних змінних-членів буде створено, якщо розмістити один статичний член в оголошені шаблона класу?

  • Завжди один.

  • Оголошувати статичні члени в шаблонах класу заборонено.

  • По одному для кожного об’єкта

  • По одному для кожного екземпляру шаблону.

  1. Який з вибраних варіантів ілюструє оголошення класу A та інтерфейсу В, при якому неможливим є наслідування А в подальшому?

а)

б)

в)

г)

class A

{

friend class CFinal;

private:

A() {}

};

//sample class

class CFinal:

private

virtual A

{

};

protected class A

{

public:

A() {}

};

// sample class

class CFinal : A

{

};

class A

{

public:

A() =0 ;

};

// sample class

class CFinal : A

{

B(){}

};

class A

{

A();

public:

};

// sample class

class CFinal : private virtual A

{

B(){}

};

  • a

  • б

  • в

  • г

  1. Наведений код є

class А

{

int i;

public:

void MyFunc( ) {i=0;}

void MyFunc( int x) { i=x;}

void MyFunc( int x, int y) { i=x+y;}

void MyFunc( int x, int y, int z = 0) { i=x+y+z;}

};

. . .

A a;

MyFunc(3, 2);

  • Правильним

  • З помилкою періоду компіляції

  • З помилкою періоду зв’язування

  • З помилкою періоду виконання.

  1. В чому різниця між:

if (ptr != 0 && *ptr != 0){...}

і

if (*ptr != 0 && ptr != 0){...}

  • Не чітко визначена пріоритетність операцій

  • Абсолютно ідентичний код

  • В другому випадку можливий Access Violation

  • В першому випадку можливий Memory Leak.

  1. Наступне оголошення класу

class A

{

statiс virtual Func() {};

};

Декларує

  • Наявність в класі статичного методу

  • Наявність в класі відритого віртуального методу

  • Наявність в класі закритого статичного віртуального методу

  • Можливість поліморфної поведінки класу

  • Неправильність оголошення класу А.

  1. В чому різниця між віртуальною функцією і віртуальним наслідування??

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

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

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

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

  • Правильні усі варіанти.

  1. Спеціалізація шаблону це

  • Визначення окремих параметрів шаблону для оголошення нового типу чи змінних нового типу.

  • Визначення виключно усіх шаблонних параметрів шаблону для оголошення нового типу чи змінних нового типу.

  • Визначення параметрів преозначених типів в списку параметрів шаблона для оголошення нового типу чи змінних нового типу

  • Визначення та присвоєння значень по замовчуванні параметрів преозначених типів в списку параметрів шаблона.