3Білет – 24 пит.
4*5 = 20
15*3 = 45
5*2 = 10
Разом –= 75 балів
Кількість білетів - 13
Запитання вартістю 1 бали (найнижча складність 39 пит.)
Чим задається розмір об’єкта класу?
Розмір об’єкта класу в пам’яті визначається сумою розмірів членів класу.
Розмір об’єкта класу в пам’яті визначається сумою розмірів членів-даних класу.
Розмір об’єкта класу в рівний розміру посиланню на тип int.
Розмір об’єкта класу в рівний розміру вказівника на об’єкт класу.
Якщо оголосити клас Catіз закритим членомitsAge, а потім створити два об’єкти класуCatз іменамиFrisckyіBoots, то чи зможе об’єктBootsотримати доступ до змінної-членуitsAgeоб’єктаFriscky?
Так. Закриті члени доступні для членів-функцій класу і різні екземпляри одного класу можуть звертатись до даних один одного.
Так. Оскільки, об’єкт має доступ до усіх членів класу.
Ні
Ні. Оскільки, об’єкт має доступ лише до закритих членів класу.
Для чого оголошувати об’єкт постійним, якщо це обмежує його можливості?
Через неможливість розміщення об’єкта в динамічній пам’яті.
Через можливість зміни об’єкта в тілі функції.
Через неможливість зміни об’єкта в тілі функції.
Для чого потрібні вказівники, якщо із посиланнями легше працювати?
Вказівники мають більші можливості стосовно доступу до членів класу.
Посилання не можуть бути нульовими, і їх заборонено переозначувати.
Вказівники потребують негайної ініціалізації при створенні
Посилання не контролюються при передаванні в тіло функції.
Якщо повернення об’єкту в якості посилання є небезпечним, то чому б завжди не повертати результат за значенням?
Повернення за значенням не дає можливості повернути усі види об’єктів з функції.
Механізм повернення за значенням працює в області далекої пам’яті.
Повернення за посиланням економить пам'ять і програма виконується швидше.
Повернення за посиланням дозволяє повернути з функції значення різних типів.
Для чого використовувати аргументи із значеннями по замовчуванню якщо можна перевантажити функцію?
Легше зрозуміти роботу функції, яка використовує значення по замовчуванню.
Швидше передаються аргументи в тіло функції.
Швидше звільняється стек після завершення роботи функції
Не переповнюється стек при передаванні значень в тіло функції.
Чи може перевантажена функція містити аргументи із значеннями замовчуванню?
Так, але при використанні аргументів із значеннями по замовчуванню для перевантажених функцій, на відміну від звичайних, треба враховувати тип значення, яке повертається функцією.
Так, але лише при перевантаженні шаблонів функцій.
Так. При використанні аргументів із значеннями по замовчуванню для перевантажених функцій потрібно дотримуватись тих самих правил, що і при використанні звичайних функцій.
Ні, таке перевантаження заборонено правилами мови.
Чому одні функції-члени реалізуються в описі класу, а інші ні?
Реалізація функції-члена за межами оголошення класу робить її вбудованою.
Реалізація функції-члена в середині оголошення класу робить її вбудованою.
Реалізація функції-члена в середині оголошення класу робить постійним вказівник this.
Жодної відмінності між таким реалізаціями функції члена не існує
Чи наслідуються дані і функції-члени базового класу в похідних класах? Якщо клас Dogпоходить від класуMammal, а класMammal– від класуAnimals, то чи унаслідує класDogдані і функції класуAnimals?
Ні. Наслідування в похідних класах передбачає наслідування виключно з власних базових класів, які є проміжними в ієрархія наслідування. Це означає, що клас Dogмає право наслідувати тільки члени класуMammalі не нічого не може наслідувати з класуAnimals.
Ні. Оскільки потрібні спеціальні для продовження наслідування модифікатори.
Так. Оскільки наслідування продовжується безкінечно, всі похідні класи унаслідують усі допустимі члени усіх базових класів.
Так. Оскільки наслідування продовжується безкінечно, всі похідні класи унаслідують усі допустимі члени безпосередньо базових класів.
Якщо клас Dogпоходить від класуMammal, а класMammal– від класуAnimal, і Mammal переозначує функцію класу Animal, то яку версію функції отримає клас Dog – базову (відAnimal) чи переозначену (відMammal)?
Якщо Dogунаслідується від класуMammal, то він отримає функцію в такому вигляді в якому вона існує в класіAnimal, тобто первісну.
Жодної не отримає, оскільки таке переозначення є забороненим.
Якщо Dog унаслідується від класу Mammal, то він отримає функцію в такому вигляді в якому вона існує в класі Mammal, тобто переозначену.
Чи можна в похідному класі оголосити закриту функцію, яка в базовому класі оголошена відкритою?
Так, похідний клас може переозначити метод батьківського і зробити його закритим.
Так, але якщо в похідному класі буде дві версії функції, одна - відкрита, а інша -закрита.
Ні, похідний клас не може переозначити метод, який у батьківському класі оголошений з іншим модифікатором.
Ні, похідний клас не може переозначити відкритий метод батьківського класу.
Чому б не зробити всі функції класу віртуальними?
Віртуальним функціям не передається вказівник this.
Віртуальні функції не наслідуються.
До віртуальних функцій не можна застосувати оператор дозволу дії.
Оголошення функції віртуальною призводить до витрат пам’яті.
В чому перевага віртуальних функцій над стандартними діями розпізнавання типу об’єкта в процесі виконання програми?
Перевагою віртуальних функцій є раннє зв’язування і прискорення процедури виклику.
Перевагою віртуальних функцій є уникнення визначення типу об’єкта і прискорення виконання програми.
Перевагою віртуальних функцій є автоматичне визначення типу об’єкта у віртуальній таблиці, замість застосування спеціального програмного блоку.
Переваги не існує
Що поганого в автоматичному приведенні типів об’єктів?
Якщо програміст застосовує приведення типів для того, щоб обійти закладений в С++ строгий контроль за типами даних, то це говорить про серйозні недоліки в структурі програми, які протирічать ідеології С++.
Якщо програміст застосовує приведення типів, то це суттєво сповільнює виконання програми і потребує додаткової оптимізації по швидкості.
Автоматичне приведення не є технологією С++, а тому компілятор повинен компілювати фрагмент коду, як код мови С.
Автоматичне приведення є операціями пізнього зв’язування, що суттєво сповільнює виконання програми.
Коли деструктор повинен бути оголошений віртуальним?
Завжди, якщо клас не буде використовуватись як базовий для інших класів.
Завжди, якщо клас не буде використовуватись як елемент масиву.
Завжди, якщо клас буде володіти властивістю дружності.
Завжди, якщо клас буде вкладеним в інший клас.
Завжди, якщо клас буде використовуватись як базовий для інших класів.
Для чого використовувати статичні члени, якщо є глобальні.
Існують обмеження у передавання глобальних змінних за посиланням у тіло функції.
Статичні члени класу швидше від глобальних передаються за адресою у тіло функції.
Обмеження доступу до членів класу робить використання статичних змінних членів більш безпечним порівняно із глобальними даними.
Робота із статичними змінними є швидшою за роботу з глобальними.
В чому відмінність потоків С++ від функції printf()?
Потоки не підтримують роботи з класами.
Потоки не підтримують роботи з помилками консольного вводу/виводу.
Функція не може прийняти змінної кількості параметрів.
Функція не здійснює контроль за типом виведених даних.
Для чого клас оголошується абстрактним?
Створення чисто віртуальних функцій дає змогу уникнути несанкціонованого створення об’єктів даного класу.
Для обох приведених випадків.
Створення абстрактного класу дає змогу побудувати єдиний інтерфейс доступу через посилання на абстрактний клас.
Для чого використовуються анонімні простори імен?
Для локалізації області дії змінною в межах даного файлу.
Для надання доступу до змінної з інших файлів проекту.
Для розмішення даних в одній ділянці пам’яті
Анонімні простори імен не мають практичного використання.
Для чого використовувати шаблони, якщо можна використовувати макроси?
Використання шаблонів прискорює виконання програми, а макросів - сповільнює.
Шаблони прискорюють процес компіляції програми.
Шаблони здійснюють перевірку типів.
Макроси здіййснюють перевірку типів.
В чому різниця між параметричним (узагальненим) типом функцій шаблона і параметром звичайної функції?
Узагальнений тип дозволяє виконувати тільки окремі дії з параметрами.
Функція шаблону дозволяє за допомогою параметра шаблону встановлювати тип параметра, який передається функції.
При передаванні аргументу екземпляру шаблону функції для заміщення параметра узагальненого типу його тип не перевіряється
Різниці немає.
Коли потрібно використовувати шаблони, а коли наслідування?
Використовуйте шаблони, коли поведінка класу є змінною за виключенням типу елемента, з яким працює клас.
Використовуйте шаблони, коли поведінка класу є постійною за виключенням типу елемента, з яким працює клас.
Використовуйте наслідування, коли поведінка класу є постійною за виключенням значення елемента, з яким працює клас.
Використовуйте наслідування, коли поведінка класу є постійною.
Коли використовувати загальні дружні класи шаблону?
У випадках, коли кожен екземпляр, незалежно від типу, повинен бути дружнім цьому класу.
У випадках, коли кожен екземпляр, залежно від типу, повинен бути дружнім цьому класу.
У випадках, коли кожен екземпляр, залежно від типу, повинен бути дружнім до цілого дерева наслідування шаблонів, яке містиь шаблон, по відношенюю до якого і задана властивість дружності.
У випадках, коли кожен екземпляр, залежно від типу, повинен бути дружнім до цілого дерева наслідування класів, яке містиь клас, по відношенюю до якого і задана властивість дружності.
Коли використовувати дружні класи шаблону і функції, специфічні для даного типу?
Коли між двома класами необхідно встановити відношення за принципом багато-до-одного.
Коли між двома класами необхідно встановити відношення за принципом багато-до-багато.
Коли між двома класами необхідно встановити відношення за принципом один-до-багато.
Коли між двома класами необхідно встановити відношення за принципом один-до-одного.
Які існують два типи стандартних контейнерів?
Послідовні і паралельні контейнери.
Паралельні і асоціативні контейнери.
Послідовні і асоціативні контейнери.
Паралельні і множинні контейнери.
Множинні і асоціативні контейнери.
Множинні і послідовні контейнери.
Якими явно визначеними атрибутами повинен володіти клас для того, щоб його можна було використовувати зі стандартними контейнерами?
Конструктор без параметрів.
Конструктор без параметрівта копії.
Конструктори без параметрів та копії і перевантажений оператор присвоєння.
Конструктори з параметрами та копії і перевантажений оператор присвоєння.
Конструктори з параметрами та копії і перевантажений оператор приведення.
Навіщо турбуватись про передавання виключень? Чому б не обробляти помилки там,
де вони виникають?
Передавання виключення дозволить централізувати обробку помилок.
Передавання виключення дозволить уникнути обробки помилок.
Передавання виключення дозволить звільнити динамічну пам’ять.
Передавання виключення дозволить прискорити звільнення стеку.
Для чого створювати об’єкт при генерації та обробці виключень? Чому б не передавати тільки номер помилки (error code)?
Об’єкти володіють механізмом автоматичного виклику конструктора і деструктора, а тому швидше звільняється пам’ять.
Об’єкти можуть передавати більш точну інформацію, а також володіють механізмом конструктора і деструктора, що необхідно для адекватної реакції на обставини.
Використання статичних об’єктів для генерації виключень дає можливість ефективніше керувати об’ємом пам’яті.
Використання об’єктів дає змогу уникнути ситуації непередбачених вкиключень.
Використання об’єктів дає змогу уникнути ситуації неперехоплених вкиключень
Чи можна використовувати виключення для негайного повернення до попередніх частин коду, навіть якщо це не зв’язано з виникненням критичної ситуації
Так, при цьому уникається небезпеки, що при прокрутці стеку деякі об’єкти випадково можу залишитися в динамічній пам’яті, що приведе до її витоку.
Так, але треба пам’ятати про небезпеку, що при прокрутці стеку деякі об’єкти випадково можу залишитися в динамічній пам’яті, що приведе до її витоку.
Ні, це заборонено стандартом мови.
Ні, оскільки в цьому випадку виключення будуть трактуватись як неперхоплені.
Ні, оскільки в цьому випадку виключення будуть трактуватись як непередбачені.
Скільки статичних змінних-членів буде створено, якщо розмістити один статичний член в оголошені шаблона класу?
Завжди один.
Оголошувати статичні члени в шаблонах класу заборонено.
По одному для кожного об’єкта
По одному для кожного екземпляру шаблону.
Який з вибраних варіантів ілюструє оголошення класу 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
б
в
г
Наведений код є
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);
Правильним
З помилкою періоду компіляції
З помилкою періоду зв’язування
З помилкою періоду виконання.
В чому різниця між:
if (ptr != 0 && *ptr != 0){...}
і
if (*ptr != 0 && ptr != 0){...}
Не чітко визначена пріоритетність операцій
Абсолютно ідентичний код
В другому випадку можливий Access Violation
В першому випадку можливий Memory Leak.
Наступне оголошення класу
class A
{
statiс virtual Func() {};
};
Декларує
Наявність в класі статичного методу
Наявність в класі відритого віртуального методу
Наявність в класі закритого статичного віртуального методу
Можливість поліморфної поведінки класу
Неправильність оголошення класу А.
В чому різниця між віртуальною функцією і віртуальним наслідування??
Віртуальна функція – функція, яка може бути переозначена пізніше в похідному від даного класі. Віртуальне наслідування – наслідування при якому один і то й же об'єкт базового класу використовується для представлення входження базового класу у похідні класи.
Віртуальна функція – функція, яка повинна бути переозначена пізніше в похідному від даного класі. Віртуальне наслідування – наслідування , яке використовується для уникнення копій класу в дереві наслідування.
Віртуальна функція – функція раннього зв’язування, виклик якої визначається компілятором в точці виклику. Віртуальне наслідування – наслідування при якому один і то й же об'єкт базового класу використовується для представлення входження базового класу у похідні класи.
Віртуальна функція – функція раннього зв’язування, виклик якої визначається компілятором в точці виклику. Віртуальне наслідування – наслідування , яке використовується для уникнення копій класу в дереві наслідування.
Правильні усі варіанти.
Спеціалізація шаблону це
Визначення окремих параметрів шаблону для оголошення нового типу чи змінних нового типу.
Визначення виключно усіх шаблонних параметрів шаблону для оголошення нового типу чи змінних нового типу.
Визначення параметрів преозначених типів в списку параметрів шаблона для оголошення нового типу чи змінних нового типу
Визначення та присвоєння значень по замовчуванні параметрів преозначених типів в списку параметрів шаблона.