类和添加对象的麻烦

时间:2017-04-06 13:50:44

标签: c++ class header

我上课时遇到了麻烦。所以我有三个不同的类:商店,客户和产品。在商店类中,我希望能够添加客户。问题是我需要添加客户的方式不遵循客户在customer.h中调用的方式。 这就是我从store.h获得的:

void addCustomer(int customerID, string customerName);
在customer.h中我有:

Customer();
Customer(string name, int customerID, bool credit);

在customer.cpp中我有:

Customer::Customer(string name, int customerID, bool credit) :
name(name), customerID(customerID), credit(credit){}

并在store.cpp中我有以下内容:

void Store::addCustomer(int customerID, string customerName){
    bool credit = false;
    Customer addCustomer(int customerID, string customerName);
    Customer* customer = new Customer(name = "Null", customerID = 0, credit);
    customers.push_back(customer);

    for (int i = 0; i < customers.size(); ++i) {
        if (customers.at(i)->getID() == customerID){
            throw runtime_error("Customer already added.");
        }

    }
}

如果已将客户添加到向量中,则抛出异常。其他所有东西都适用于所有三个类的所有get和set函数,但是这一段代码不能正常工作,我甚至没有得到错误,程序只是不会比某个点运行得更远。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不理解该功能的逻辑。如果您想检查客户是否已经在向量中,那么您应该之前将其添加到向量中,而不是之后。您的代码中有很多我不理解的东西,我想知道为什么你没有得到一个巨大的编译器错误列表,但是这个方法看起来像这样:

void Store::addCustomer(int customerID, string customerName){
    for (int i = 0; i < customers.size(); ++i) {
        if (customers.at(i).getID() == customerID){
            return; // why runtime error? if the customer is there already 
                    // then just dont add it....
        }
    }
    customers.push_back(Customer(customerName,customerID,false));
}

请注意,我假设您将向量从保持指针更改为保持对象(即std::vector<Customer>)。在向量中存储指针几乎没有意义。 此外,我不会在这里使用运行时异常。运行时异常应该适用于不应该发生的事情。

如果您之前已经确定要添加的客户是新客户,那么运行时激活是有意义的。然后运行时异常会告诉您代码存在一些问题,确保它是新客户。但是,我想这个函数实际上是你检查的地方。因此,它不是例外,而是在正常程序执行期间可能发生的事情。如果调用代码需要知道是否添加了客户,则可以使方法返回bool为例。