【发布时间】:2022-01-03 08:58:26
【问题描述】:
我正在努力完成我的 C++ 课程的期末项目。我将尝试解释这一点,因为它有点令人困惑。我正在创建一个在线购物车。我是初学者,所以我想知道递归函数是否可以调用外部函数?我有一个带有 for 循环的函数,可以计算向量的总和,但我们的指令是创建一个递归函数。此外,for 循环调用了另一个函数。这可以在递归函数中完成吗?我们必须将它们放入单独的文件中。 2 个名为 ShoppingCart 和 ItemToPurchase 的头文件。 2 个名为 ShoppingCart 和 ItemToPurchase 的 cpp 文件和 1 个主 cpp 文件。
类内 ShoppingCart.h 文件中 PrintTotal() 和 GetCostofCart() 的函数声明:
class ShoppingCart {
public:
ShoppingCart();
double GetCostofCart();
void PrintTotal();
private:
vector< ItemToPurchase > cartItems;
};
ShoppingCart.cpp 中用于打印总计的函数定义:
void ShoppingCart::PrintTotal() {
if (cartItems.size() == 0) {
cout << "Shopping cart is empty" << endl;
}
for (int i = 0; i < cartItems.size(); i++) {
cartItems.at(i).PrintItemCost();
cout << " " << endl;
}
cout << "Total: $" << GetCostofCart() << endl;
}
在 ShoppingCart.cpp 中 GetCostofCart() 的函数定义:
double ShoppingCart::GetCostofCart() {
int costofCart = 0;
for (int i = 0; i < cartItems.size(); i++) {
costofCart += cartItems.at(i).GetPrice() * cartItems.at(i).GetQuantity();
}
return costofCart;
}
类内ItemtoPruchase.h文件中的函数声明:
class ItemToPurchase {
public:
ItemToPurchase();
void PrintItemCost();
private:
double itemPrice;
int itemQuantity;
};
ItemToPurshcase.cpp文件中的函数定义打印物品成本:
void ItemToPurchase::PrintItemCost() {
cout << itemName << " " << itemQuantity;
cout << " @ $" << itemPrice;
cout << " = $" << itemPrice * itemQuantity << endl;
}
main.cpp 中调用 PrintTotal 的函数:
void OutputCart(ShoppingCart& cart) {
cout << endl;
cout << "OUTPUT SHOPPING CART" << endl;
cout << endl;
cart.PrintTotal();
}
根据用户输入在 if/else if 语句中调用函数:
else if (userChoice == 'o') {
cout << customerName << "'s Shopping Cart" << endl;
cout << "Today's Date: " << currentDate << endl;
OutputCart(cart);
}
我已经尝试了许多不同的方法来做到这一点,但我没有成功。我曾尝试在互联网上搜索解决方案,但找不到一个很好的例子。我想知道这是否可能,如果可以,该怎么做。
提前致谢!
【问题讨论】:
-
一般来说,是的;任何函数都可以调用任何函数,包括它自己。所以可能还有其他问题,但你的问题并没有真正弄清楚它是什么。
-
你能把它变成minimal reproducible example:一个小但可编译的程序来演示问题(如果可能的话,只在一个文件中),以及对问题的解释(确切的错误消息或描述不正确的行为)。
-
是的,有可能;递归函数对它们可以调用的其他函数没有特殊限制。不过,我在您发布的代码中看不到任何递归函数。
-
在调试器中遍历它会发生什么?
-
递归非常不适合计算购物车总数之类的事情。显示作业的确切措辞可能是个好主意,以防万一您解释不正确。