└── lab-cpp-04
├── Doxyfile
├── Makefile
├── README.md
├── doc
│ ├── lab-cpp-04.md
│ └── assets
│ └── uml.png
├── test
│ └── test.cpp
└── src
├── entity.cpp
├── entity.h
├── list.cpp
├── list.h
└── main.cpp
Модернізувати попередню лабораторну роботу (оператори) наступним чином:
- базовий клас зробити абстрактним. Додати абстрактні методи;
- додати класи-спадкоємці з розділу Розрахункове завдання / Iндивідуальні завдання, котрі будуть поширювати функціонал "базового класу" відповідно до індивідуального завдання;
- повинно бути реалізовано усі 3 методи з розділу Розрахункове завдання / Iндивідуальні завдання;
- клас-список переробити таким чином, щоб він міг працювати як з базовим класом, так і з його спадкоємцями. При цьому серед полів класу-списку повинен бути лише один масив, що містить усі типи класів ієрархії. Оновити методи, що працюють з цим масивом.
- у функціях базового класу та класів-спадкоємців обов’язкове використання ключових слів
final
таoverride
. - упевнитися, що оператори вводу/виводу працюють коректно для усіх класів їєрархії.
- у звіти необхідно навести UML діаграму ієрархії класів
- програма має мати документацію, що оформлена за допомогою утиліти doxygen;
- робота повинна бути оформлена згідно "Вимогам до структурної побудови звіту";
- продемонструвати відсутність витоків пам’яті за допомогою утиліти valgrind;
- продемонструвати роботу розроблених методів за допомогою модульних тестів;
- у звіті навести ступень покриття коду модульними тестами. 50% - є мінімально допустимим відсотком покриття коду тестами;
- продемонструвати роботу розроблених методів за допомогою модульних тестів;
- не використовувати конструкцію "using namespace std;", замість цього слід робити "using" кожного необхідного класу, наприклад: using std::string, using std::cout;
- у проекті не повинні використовуватися бібліотеки введення / виведення мови C, а також не повинні використовуватися рядки типу
char*
.
- Для чого потрібне спадкування?
- Як впливають права доступу атрибутів на спадкування?
- Які бувають атрибути при спадкуванні і на що вони впливають?
- Коли працює спадкування для об’єктів-нащадків?
- Що таке "ієрархія" класів?
- Які ієрархії у спадкуванні можуть бути? Наведіть приклади.
- Чим відрізняється спадкування від агрегації?
- Що таке поліморфізм?
- Для чого потрібні віртуальні методи?
- Які методи називають "чисто віртуальними"?
- Що таке таблиця віртуальних методів?
- Що таке абстрактний клас?
- Чи можна створити об’єкт абстрактного класу?
- Що таке інтерфейс?
- Які умови необхідно виконати для реалізації поліморфізму?
- Чим відрізняється абстрактний клас від інтерфейсу?
- Чим відрізняється абстрактний клас від звичайного класу?
- Яких правил треба дотримуватись при перевизначенні віртуальних методів?
- Яке призначення ключових слів final та override?