如何为这个addProduct函数编写implmentation代码

时间:2017-02-22 09:44:52

标签: c++

我是c ++的新手,我在编写该函数的代码时遇到了麻烦。我只需要将产品价值,产品名称,产品描述,价格和数量存储到矢量库存中。

Store.hpp

#ifndef STORE_HPP

#define STORE_HPP
class Product;
class Customer;
#include<string>

#include "Customer.hpp"
#include "Product.hpp"

class Store
{
private:
    std::vector<Product*> inventory;
    std::vector<Customer*> members;

public:
    void addProduct(Product* p);
    void addMember(Customer* c);
    Product* getProductFromID(std::string);
    Customer* getMemberFromID(std::string);
    void productSearch(std::string str);
    void addProductToMemberCart(std::string pID, std::string mID);
    void checkOutMember(std::string mID);
};

#endif

我试着以这种方式写它。我知道这是错的,请帮帮我。

提前致谢

void Store::addProduct(Product* p)
{
    Product* p(std::string id, std::string t, std::string d, double p, int qa);
    inventory.push_back(p);
}

2 个答案:

答案 0 :(得分:0)

你可以通过p指针传递一个完整的对象并将其推送到向量,它看起来是一样的,但没有字符串Product* p(std::string id, std::string t, std::string d, double p, int qa);你也可以创建你的产品的副本,这种方式是有效的,如果你有复制构造函数。

void Store::addProduct(Product* p)
{

    Product* copyOfP = new Product(*p);
    inventory.push_back(copyOfP);
}

或另一种不太好的方式:     void Store :: addProduct(Product * p)     {

    Product* copyOfP = new Product(p->getId(), p->getT(), p->getD, ... );
    inventory.push_back(copyOfP);
}

如果您选择带副本的变体 - 请勿忘记在Store的析构函数中手动删除它们。

答案 1 :(得分:0)

您的代码

void Store::addProduct(Product* p)
{
    Product* p(std::string id, std::string t, std::string d, double p, int qa);
    inventory.push_back(p);
}

可能会发出警告 - 您已重新声明了形式参数p

该行

    Product* p(std::string id, std::string t, std::string d, double p, int qa);

看起来像是一个函数声明,用于返回指向Product的指针。您向函数发送了Product指针,因此只需使用:

void Store::addProduct(Product* p)
{
    inventory.push_back(p);
}

您正在尝试推送函数p - 不要忽略警告。