Файл: Ответы на вопросы по шагам 1 3.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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;

}