ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 24
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Ответы на вопросы по шагам 1 – 3
1) Определить имена класса и его полей.
Имя класса – Microwave
Поля класса – manufacturer_ (производитель объекта),
volume_ (объем объекта), price_ (цена объекта)
2) Определить тип данных для полей класса.
string manufacturer_;
double volume_;
double price_;
3) Определить множество допустимых значений для полей класса, в соответствие с требованиями и ограничениями предметной области.
Для manufacturer_ допустимым значением является любое сочетание символов.
Для volume_ допустимым значением является любое положительное сочетание арабских цифр. Отрицательные сочетания (со знаком “-“ перед числом) будут вызывать ошибку, функция прекратится.
Для price_ ;допустимым значением является любое положительное сочетание арабских цифр. Отрицательные сочетания (со знаком “-“ перед числом) будут вызывать ошибку, функция прекратится.
Определение класса с комментариями о назначении полей и методов (шаги 5 – 10).
class Microwave { // объявление класса
private: // объявление полей класса
string manufacturer_; // производитель объекта
double volume_; //объем объекта
double price_; // цена объекта
void init(string manufacturer = "", double volume = 0.0, double price = 0.0); // определение множества допустимых значений
public:
Microwave(string manufacturer = "", double volume = 0.0, double price = 0.0);
Microwave(const Microwave& other);
void rename(string manufacturer);
void setVolume(double volume);
void setPrice(double price);
void print() const;
};
Microwave* createMicrowave(); // определение класса
Тексты разработанных методов (шаги 5 – 10). Комментарии об особенностях их работы (алгоритм).
Microwave::Microwave(string manufacturer, double volume, double price)
// конструктор с параметрами для проверки устанавливаемых значений.
Microwave::Microwave(const Microwave& other)
// копирование полей одного экземпляра класса в поля создаваемого объекта
void Microwave::init(string manufacturer, double volume, double price)
// проверка корректности переданных значений полей
void Microwave::rename(string manufacturer) //переименование объекта
void Microwave::setVolume(double volume) { // установка объёма объекта
void Microwave::setPrice(double price) { // установка цены объекта
void Microwave::print() const { //вывод сведений об экземпляре класса
Microwave* createMicrowave() { //создание экземпляра класса
Microwave – конструктор с параметрами, который использует метод init() для проверки устанавливаемых значений. Программа выводит на экран заранее написанные параметры объекта;
Также копирует значение одного экземпляра объекта в поле другого создаваемого объекта.
init – проверяет и инициализирует предложенные пользователем и написанные заранее в программе параметры.
rename – переименовывает производителя объекта
setVolume – функция для изменения объема объекта (в случае надобности)
setPrice - функция для изменения цены объекта (в случае надобности)
print – выводит на экран значения параметров объекта
Текст тестирующей функции (шаг 11) с комментариями.
int main() {
Microwave m1("Panasonic", 1.2, 150.0); //создание 2 объектов "на стеке"
Microwave m2("Samsung", 0.8, 120.0);
m1.print(); // печать сведений об объекте
m2.print();
Microwave m3 = m2; // изменение поля в первом объекте
m3.print();
m1.rename("LG"); // печать сведения об измененном объекте
m1.print();
Microwave* m4 = createMicrowave(); // создание 2 экземпляров класса в динамической памяти
Microwave* m5 = createMicrowave();
if (m4 != nullptr) { // печать сведений об объектах класса
m4->print();
}
if (m5 != nullptr) { // печать сведений об объектах класса
m5->print();
}
delete m4; // удаление динамически созданных объектов
delete m5;
return 0;
}
Скриншот результата запуска тестовой функции и выводы о полученных результатах.
Вывод – программа работает корректно, результат соответствует ожидаемому значению.
Приложение. Исходный код программы.
Файл P6.h
#pragma once
#include
#include
#include
#include
using namespace std;
class Microwave { // объявление класса
private: // объявление полей класса
string manufacturer_; // производитель объекта
double volume_; //объем объекта
double price_; // цена объекта
void init(string manufacturer = "", double volume = 0.0, double price = 0.0); // определение множества допустимых значений
public:
Microwave(string manufacturer = "", double volume = 0.0, double price = 0.0);
Microwave(const Microwave& other);
void rename(string manufacturer);
void setVolume(double volume);
void setPrice(double price);
void print() const;
};
Microwave* createMicrowave(); // определение класса
Файл prak6.cpp
#include "P6.h"
Microwave::Microwave(string manufacturer, double volume, double price) { // конструктор с параметрами для проверки устанавливаемых значений.
init(manufacturer, volume, price); // проверка установленных значений
}
Microwave::Microwave(const Microwave& other) { // копирование полей одного экземпляра класса в поля создаваемого объекта
init(other.manufacturer_, other.volume_, other.price_); // проверка установленных значений
}
void Microwave::init(string manufacturer, double volume, double price) { // проверка корректности переданных значений полей
if (manufacturer.empty()) { // если переданные данные некорректны - вызывается ошибка
throw invalid_argument("Manufacturer cannot be empty.");
}
if (volume <= 0) { // если переданные данные некорректны - вызывается ошибка
throw invalid_argument("Volume must be positive.");
}
if (price <= 0) { // если переданные данные некорректны - вызывается ошибка
throw invalid_argument("Price must be positive.");
throw invalid_argument("Price must be positive.");
}
manufacturer_ = manufacturer;
volume_ = volume;
price_ = price;
}
void Microwave::rename(string manufacturer) { //переименование объекта
if (manufacturer.empty()) { // если переданные данные некорректны - вызывается ошибка
throw invalid_argument("Manufacturer cannot be empty.");
}
manufacturer_ = manufacturer;
}
void Microwave::setVolume(double volume) { // установка объёма объекта
if (volume <= 0) { // если переданные данные некорректны - вызывается ошибка
throw invalid_argument("Volume must be positive.");
}
volume_ = volume;
}
void Microwave::setPrice(double price) { // установка цены объекта
if (price <= 0) { // если переданные данные некорректны - вызывается ошибка
throw invalid_argument("Price must be positive.");
}
price_ = price;
}
void Microwave::print() const { //вывод сведений об экземпляре класса
cout << "Microwave: " << manufacturer_ << ", Volume: " << volume_ << "L, Price: " << price_ << "USD" << endl;
} // вывод данных об экземпляре класса
Microwave* createMicrowave() { //создание экземпляра класса
string manufacturer;
double volume;
double price;
cout << "Enter the manufacturer: "; // ввод названия объекта
cin >> manufacturer;
cout << "Enter the volume (in liters): "; // ввод объема объекта
cin >> volume;
if (volume <= 0) {// если переданные данные некорректны - вызывается ошибка, возвращается nullptr
cerr << "Error creating Microwave object: Volume must be positive." << endl;
return nullptr;
}
cout << "Enter the price (in USD): "; // ввод цены объекта
cin >> price;
if (price <= 0) {// если переданные данные некорректны - вызывается ошибка, возвращается nullptr
cerr << "Error creating Microwave object: Price must be positive." << endl;
return nullptr;
}
try {
return new Microwave(manufacturer, volume, price);
}
catch (exception& e) { // если пользователь отказывается от создания объекта, то функция возвращает nullptr
cerr << "Error creating Microwave object: " << e.what() << endl;
return nullptr;
}
}
int main() {
Microwave m1("Panasonic", 1.2, 150.0); //создание 2 объектов "на стеке"
Microwave m2("Samsung", 0.8, 120.0);
m1.print(); // печать сведений об объекте
m2.print();
Microwave m3 = m2; // изменение поля в первом объекте
m3.print();
m1.rename("LG"); // печать сведения об измененном объекте
m1.print();
Microwave* m4 = createMicrowave(); // создание 2 экземпляров класса в динамической памяти
Microwave* m5 = createMicrowave();
if (m4 != nullptr) { // печать сведений об объектах класса
m4->print();
}
if (m5 != nullptr) { // печать сведений об объектах класса
m5->print();
}
delete m4; // удаление динамически созданных объектов
delete m5;
return 0;
}