@KseniaKlim

Как создать структуру с вектором, который хранит экземпляры классов?

Делаю задание, в котором нужно создать небольшое консольное приложение. Необходимо реализовать структуру заказа, но я не понимаю как прописать вектор с товарами. Помогите пожалуйста решить проблему.
#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct Order {
    int id;
    vector<Item> items;
    int num_of_items;
    double price;

    Order(int p_id, int p_num_of_items, double p_price) : id(p_id), num_of_items(p_num_of_items), price(p_price) {}

    void addItem(const Item& item) {
        items.push_back(item);
    }

    void printInfo() {
        cout << "Состав заказа:" << endl;
        for (const auto& item : items) {
            cout << "Название: " << item.title << ", Цена за штуку: " << item.price <<  endl;
        }
    }
};

class Item 
{
public:
    string title;
    double price;
    int number;

    Item(string p_title, double p_price, int p_number) : title(p_title), price(p_price), number(p_number) {}

    void printInfo() {
        cout << "Название: " << title << ", Цена: " << price << ", Количество на складе: " << number << endl;
    }
};

class Clothes : public Item {
public:
    string size;
    string color;

    Clothes(string p_title, double p_price, int p_number, string p_size, string p_color) : Item(p_title, p_price, p_number), size(p_size), color(p_color) {}

    void changeSize(string p_size) {
        size = p_size;
    }

    void changeColor(string p_color) {
        color = p_color;
    }

    void printInfo() {
        cout << "Название: " << title << ", Цена: " << price << ", Количество на складе: " << number << ", Размер: " << size << ", Цвет: " << color << endl;
    }
};

class Shoes : public Item {
public:
    string size;
    string type;

    Shoes(string p_title, double p_price, int p_number, string p_size, string p_type) : Item(p_title, p_price, p_number), size(p_size), type(p_type) {}

    void changeSize(string p_size) {
        size = p_size;
    }

    void changeType(string p_type) {
        type = p_type;
    }

    void printInfo() {
        cout << "Название: " << title << ", Цена: " << price << ", Количество на складе: " << number << ", Размер: " << size << ", Тип: " << type << endl;
    }
};
int main() {
    Item item1("Футбольный мяч", 20.0, 10);
    Clothes clothes1("Футболка", 15.0, 20, "M", "Синяя");
    Shoes shoes1("Кроссовки", 50.0, 15, "38", "Кроссовки");
    Order order1(1111, 2, 35.0);

    item1.printInfo();
    clothes1.printInfo();
    shoes1.printInfo();

    order1.addItem(item1);
    order1.addItem(clothes1);

    order1.printInfo();

    return 0;
}
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
В векторе Orderа надо хранить ссылки на Item (или указатели).
Т.к. дочерние классы Item имеют размер >= sizeof(Item), а в векторе каждый элемент имеет фиксированный размер (сейчас sizeof(Item)), то по сути дочерние классы при попадании в Order обрезаются до состояния Item, а это не то что нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы