Лабораторная работа 3 для студентов курса “Программирование на основе классов и шаблонов” 2 семестра кафедры ИУ5 МГТУ им Н.Э. Баумана.
Цель данной лабораторной работы заключается в освоении навыков:
Зайдите в свою локальную директорию с репозиторием для выполнения лабораторных работ. Заберите ветку с соответствующей лабораторной работой из общего репозитория:
git pull upstream
или
git pull upstream lab_3
Переключитесь на ветку с текущей лабораторной работой:
git checkout lab_3
Свяжите ветку локального репозитория с вашим удаленным репозиторием:
git push --set-upstream origin lab_3
Используя класс, разработанный в предыдущей лабораторной работе, расширьте программу следующими возможностями:
Реализуйте сохранение массива объектов в текстовый файл.
Реализуйте загрузку массива объектов из текстового файла.
Реализуйте добавление нового объекта в массив.
Реализуйте удаление объекта из массива по заданному критерию (например, по имени или идентификатору).
Реализуйте сортировку массива объектов по одному из полей класса.
(Для сильных студентов) Реализуйте поиск объекта по заданному параметру.
(Для сильных студентов) Реализуйте редактирование данных выбранного объекта.
std::string запрещено; допускается работа только с C-строками.#include <iostream>
#include <fstream>
class Planet {
private:
char* name;
double mass;
public:
// Конструкторы и деструктор
Planet() noexcept;
explicit Planet(const char* name, double mass);
Planet(const Planet& other);
Planet(Planet&& other) noexcept;
~Planet();
// Операторы присваивания (copy-and-swap)
Planet& operator=(Planet other) noexcept;
// Методы доступа
const char* getName() const;
double getMass() const;
void setName(const char* name);
void setMass(double mass);
// Перегрузка потокового ввода-вывода
friend std::ostream& operator<<(std::ostream& os, const Planet& p);
friend std::istream& operator>>(std::istream& is, Planet& p);
};
#include <iostream>
#include "Planet.h"
namespace{
constexpr int previewSize = 10;
}
void showMenu();
void loadFromFile(Planet* planets, int& size);
void saveToFile(const Planet* planets, int size);
void addPlanet(Planet* planets, int& size);
void removePlanet(Planet* planets, int& size);
void sortPlanets(Planet* planets, int size);
// Дополнительные задания (для сильных студентов)
int findPlanet(const Planet* planets, int size);
void editPlanet(Planet* planets, int size);
int startApp() {
Planet* planets = new Planet[preview Size];
int size = 0;
int choice = 1;
while (choice != 9){
showMenu();
std::cin >> choice;
switch (choice) {
case 1:
loadFromFile(planets, size);
break;
case 2:
saveToFile(planets, size);
break;
case 3:
addPlanet(planets, size);
break;
case 4:
removePlanet(planets, size);
break;
case 5:
sortPlanets(planets, size);
break;
case 6:
findPlanet(planets, size); // дополнительно
break;
case 7:
editPlanet(planets, size); // дополнительно
break;
case 8:
// вывод массива
break;
}
}
return 0;
}
Отчёт по лабораторной работе должен содержать:
explicit в C++?noexcept в c++?Copy-and-Swap в С++