Как скопировать один объект из вектора в другой вектор в C ++? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть класс Product, который представляет один объект Product, каждый новый объект Product хранится внутри вектора, который является частью класса Catalog.Я хочу, чтобы пользователь мог добавлять товары, которые существуют в векторе каталога, в свою корзину покупок, а это еще один класс, в котором есть вектор для сохранения товаров, которые он хочет заказать.Я хочу, чтобы это было сделано путем копирования из вектора каталога в вектор корзины покупок.

Класс продукта

class Product
{
    private:
        // int id;
        // Category category;
        std::string name;
        std::string description;
        float price;
        unsigned short int stock; 

    public:
        Product(std::string name, std::string description, float price, 
                unsigned short int stock);

        void setId(int id);
        // void setCategory(Category category);
        void setName(std::string name);
        void setDescription(std::string description);
        void setPrice(float price);
        void setStock(unsigned short int stock);

        int getId();
        // Category getCategory();
        std::string getName();
        std::string getDescription();
        float getPrice();
};

Класс каталога

class Catalog 
{
    // friend class ShoppingCart;

    private:
        std::vector<Product> catalog;
        std::vector<Product>::iterator it;

    public:
        /**
         * TODO: The createProduct(), deleteProduct() and updateProduct() method should only be accessible by the admin user
         */

        std::vector<Product> getCatalog();
        // add product to catalog -> admin
        void productCreate(Product p);
        // delete product from catalog -> admin
        void productDelete(std::string name);
        // update a product -> admin
        void productUpdate(std::string &name);
        // list products inside catalog

        void productList();
        // search products 
        bool productSearch(std::string name);

};

Класс ShoppingCart

class ShoppingCart
{   
    private:
        // vector that contains products to order
        std::vector<Product> shoppingCart;
        Catalog catalog;
        // int quantity;

    public:
        void cartList();
        int cartSize();
        void addToCart(std::string);
        void deleteFromCart(std::string);
        void clearCart();
};

Поскольку этот проект основан на тексте (терминал), я хочу, чтобы пользователь мог добавить товар в свою корзинунабрав название продукта.Мою логику для этого можно увидеть в коде ниже:

метод addToCart из класса ShoppingCart

void ShoppingCart::addToCart(string name)
{   
    /** 
     * BUG: Doesnt add objects to the shoppingcart vector
     */

    for (Product p : catalog.getCatalog())
    {
        if (p.getName() == name) {
            shoppingCart.push_back(p);
        } else {
            printf("Oops.. %s doesn't seem to exist in our catalog.",
                    name.c_str());
        }
    }
}

Просмотр, который получает пользовательский ввод

void View::shoppingcart()
{
    string productName;

    cout << "Add to cart: ";
    cin >> productName;

    cart.addToCart(productName);

    printf("You added '%s'", productName.c_str());

    cout << endl;
}

когда я выполняю этот код, ошибки не выдаются, но на самом деле ничего не добавляется к вектору корзины, размер остается равным 0. Что я делаю не так?Или я что-то здесь упускаю?Имейте в виду, что я новичок в программировании на C ++.

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Итак, я понял, что я сделал не так. Как указал @scheff, в моей корзине покупок у меня было Catalog catalog. Однако в моем классе View у меня уже есть экземпляр Catalog. Я полностью потерял ход своих мыслей после того, как покинул этот проект на две недели, хе-хе, так что мой плохой. Поэтому, чтобы убедиться, что я получил объект из каталога, я изменил метод addToCart, добавив дополнительный параметр: addToCart(string name, Catalog catalog).

Отрывок

// ShoppingCart.cpp
void ShoppingCart::addToCart(string name, Catalog catalog)
{
    for (Product p : catalog.getCatalog())
    {
        if (p.getName() == name) {
            shoppingCart.push_back(p);
        }
    }
}
// View.cpp
void View::shoppingcart()
{
    // Allows user to add product to shopping cart.
    string productName;
    // int quantity;

    while (productName != "q")
    {   
        cout << "Cart : " << cart.cartSize() << " item(s)" << endl << endl;

        cout << "Enter product name to add to cart or enter 'q' to quit : ";
        cin >> productName;

        cart.addToCart(productName, catalog);
        // cart.addToCart(productName, quantity, catalog);
    }
}

Спасибо за отзыв.

0 голосов
/ 12 июня 2019

Функция addToCart напечатает сообщение для каждого элемента в каталоге, отличного от того, с именем которого вы сравниваете.Вы можете сначала выполнить поиск и распечатать сообщение, только если оно отличается от всех товаров в каталоге.Кроме того, если вы используете набор, вы сможете найти его быстрее, чем сравнивать с каждым продуктом в каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...