我有一个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);
};
购物车类
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();
};
由于这个项目是基于文本的(终端),我希望用户能够通过输入产品名称将产品添加到他的购物车中。我的逻辑可以在下面的代码中看到:
ShoppingCart类中的addToCart方法
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 ++编程的新手。
答案 0 :(得分:0)
所以我弄清楚了我做错了什么。正如@scheff所指出的,我有Catalog catalog
作为我的ShoppingCart的班级成员。但是,在我的View类中,我已经有一个Catalog的实例。离开这个项目两个星期后,我完全失去了思路,所以我很糟糕。因此,为确保我从目录中获取对象,我通过添加一个额外的参数addToCart(string name, Catalog catalog)
修改了addToCart方法。
代码段:
// 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);
}
}
感谢您的反馈。
答案 1 :(得分:-1)
addToCart函数将为目录中的每个元素(与您所比较的名称不同)打印消息。您可能希望先搜索,然后仅在与目录中的所有产品都不相同时打印消息。另外,如果您使用集合,则每次查找的速度可能比与目录中的每种产品进行比较的速度快。