└── lab-cpp-02
├── Doxyfile
├── Makefile
├── README.md
├── doc
│ └── lab-cpp-02.md
├── test
│ └── test.cpp
└── src
├── entity.cpp
├── entity.h
├── list.cpp
├── list.h
└── main.cpp
Поширити попередню лабораторну роботу таким чином:
- використання функцій
printf
/scanf
замінити на використанняcin
/cout
; - усі конкатенації рядків замінити на використання
stringstream
; - усі строки типу
char *
замінити наstd::string
; - замінити метод виводу інформації про об’єкт на метод, що повертає рядок-інформацію про об’єкт, який далі можна виводити на екран;
std::string& Phone::toString();
- замінити метод вводу інформації про об’єкт на метод, що приймає рядок з інформацією про об’єкт, обробляє його та створює об’єкт на базі цієї інформації
- поширити клас-список, шляхом реалізації методів роботи з файлами за допомогою файлових потоків (fstream) (якщо використовувалися функції
fprintf
/fscanf
– замінити їх на класиifsteam
/ofstream
), при цьому сигнатури методів повинні виглядати таким чином:- читання (List – клас-список об’єктів, при цьому слід пам’ятати, що при повторному читанні з файлу, попередні дані списку повинні бути очищені):
void List::readFromFile(std::string& fileName);
- запис:
void List::writeToFile(std::string& fileName);
- програма має мати документацію, що оформлена за допомогою утиліти doxygen;
- робота повинна бути оформлена згідно "Вимогам до структурної побудови звіту";
- продемонструвати відсутність витоків пам’яті за допомогою утиліти valgrind;
- продемонструвати роботу розроблених методів за допомогою модульних тестів;
- у звіті навести ступень покриття коду модульними тестами. 50% - є мінімально допустимим відсотком покриття коду тестами;
- продемонструвати роботу розроблених методів за допомогою модульних тестів;
- не використовувати конструкцію "using namespace std;", замість цього слід робити "using" кожного необхідного класу, наприклад: using std::string, using std::cout;
- у проекті не повинні використовуватися бібліотеки введення / виведення мови C, а також не повинні використовуватися рядки типу
char*
.
- Як здійснювати виведення даних на екран за допомогою потоків?
- Як здійснювати читання даних з клавіатури за допомогою потоків?
- Для чого потрібен клас stringstream?
- Для чого потрібен клас string? Наведіть аналогію роботи з типом char*.
- Що таке простір імен?
- Як здійснювати виведення даних у текстовий файл за допомогою потоків?
- Як здійснювати читання даних з файлу за допомогою потоків?
- Як здійснювати виведення даних у бінарний файл за допомогою потоків?
- Яке призначення маніпуляторів setw(w) та setprecision(d)? Що треба зробити, щоб можна було їх використовувати?
- Порівняйте текстові та бінарні файли. Яка у них відмінність?