C++课程作业程序问题:getTotalCost()函数输出0排查求助
排查C++ ShoppingCart中getTotalCost()返回0的问题
嘿,我来帮你搞定这个头疼的问题!从你给出的代码来看,首先就发现一个明显的漏洞——addItem函数的实现没写完啊!cartItems.pus...应该是cartItems.push_back(item)吧?如果这一步没完成,购物车根本没添加任何商品,那总价自然是0了。
接下来我们一步步排查可能的原因:
1. 先补全addItem函数的实现
这是最基础的一步,确保商品真的能被加入购物车:
void ShoppingCart::addItem(ItemToPurchase item) { cartItems.push_back(item); // 把商品添加到容器里,这步可不能少! }
要是漏掉这行代码,你的cartItems容器一直是空的,计算总价的时候自然啥都加不出来,只能返回0。
2. 检查getTotalCost()的实现逻辑
你没给出这个函数的代码,但通常它需要遍历购物车里的所有商品,累加每个商品的「价格×数量」。如果这里写得有问题,也会返回0,比如:
- 根本没遍历
cartItems,直接return 0 - 访问商品的价格或数量时出错(比如变量名拼错,或者
ItemToPurchase的成员是私有但没提供访问方法)
给你一个正确的参考实现:
double ShoppingCart::getTotalCost() const { double total = 0.0; // 遍历购物车里的每一件商品 for (const auto& item : cartItems) { total += item.getPrice() * item.getQuantity(); // 这里假设ItemToPurchase有getPrice()和getQuantity()这两个公开方法 } return total; }
3. 确认ItemToPurchase类没毛病
得保证ItemToPurchase的价格、数量这些成员变量初始化是对的,而且有正确的访问接口。比如它的头文件应该类似这样:
#ifndef ITEMTOPURCHASE_H #define ITEMTOPURCHASE_H #include <string> using namespace std; class ItemToPurchase { private: string itemName; double itemPrice; int itemQuantity; public: // 默认构造函数,这里可以根据需求调整默认值 ItemToPurchase() : itemName("None"), itemPrice(0.0), itemQuantity(0) {} // 带参数的构造函数 ItemToPurchase(string name, double price, int quantity) : itemName(name), itemPrice(price), itemQuantity(quantity) {} // 访问价格和数量的方法 double getPrice() const { return itemPrice; } int getQuantity() const { return itemQuantity; } // 其他你需要的方法,比如设置商品信息之类的 }; #endif
要是你创建商品对象的时候,价格或者数量被错误地设成了0,哪怕加到购物车里,总价也还是0。
4. 检查主程序的调用流程
最后看看你在主程序里是怎么用这些类的,得确保:
- 创建了有效的
ItemToPurchase对象(价格和数量都不是0) - 调用了
addItem把商品加到购物车 - 之后才调用
getTotalCost()
举个正确的调用例子:
int main() { ShoppingCart myCart("Saad"); // 创建一个有实际价格和数量的商品 ItemToPurchase wirelessMouse("Wireless Mouse", 29.99, 2); myCart.addItem(wirelessMouse); // 输出总价 cout << "Total Cost: $" << myCart.getTotalCost() << endl; return 0; }
要是你忘了调用addItem,或者添加的商品本身价格/数量是0,那结果肯定还是0。
先从这几个点查起,大概率是addItem没写完的问题!
内容的提问来源于stack exchange,提问作者Saad Arshad
相关产品推荐
相关产品推荐

