类的大问题,以及从空函数c++返回

Big problem with classes , and returning from void function c++

本文关键字:函数 c++ 返回 大问题      更新时间:2023-10-16

这是我第一次学习语言,我真的很兴奋能玩课,我确实有一个我似乎无法理解的主要问题; 我正在建立一个银行菜单。当然,这是一个类,我有一个不同类别的客户,这基本上是我银行中的一个数组。 所以我在银行内的菜单功能看起来像这样:

void menu (){
manager();
int n,m;
cout << "welcome to our bank managment system. n";
cout << "please choose one of the following options : n";
cout << "1-add a new clientn";
cout << "2-remove a leaving clientn";
cout << "3-bank statisticsn";
cout << "4-if you are a costumern";
cout << "5-exitn";
cin  >> n ;
if()
if()
if()
if()
if()

请注意,我的返回函数在里面被召唤了很多

我有一个返回功能可以返回菜单:

void returnfunction (){
int back = 0;
cout << "n0-back to menu n press a diffrent number back to exit :)n";
cin >> back ;
if (back==0){
return menu();
}
if (back!=0){
cout << "thank you for using our program ! ";
return ;
}

它工作得很好,直到我玩了很多,然后按 5 退出(这是我对 n==5 的选项( 我必须强调,当 im 仅在几个简单的操作后才达到 5 时,它的工作正常...... 如何修复该返回函数?

当然我的主要看起来像这样:

int main()
{
srand (time(NULL));
Bank b ;
b.menu();
}

欣赏你所有的智慧,非常感谢

你的函数:

void returnfunction ()

声明除您外,什么都不return(void

(:
return menu();

return一些事情,这是非常不清楚的(即使menu()也返回void(

如果要调用menu()然后return写:

menu();
return;

这段代码有几个问题,老实说,它不会用其他命令式 OO 语言编译。但这是规则无关紧要的 c++。旁白:如果你没有充分的理由使用 C++,请先学习 Rust。我保证你以后会感谢我的。

保罗有权利这样做。编译器应该在该语句中出错:

return menu();

但是,等价物是完全合法的:

menu();
return;

但这仍然会在理论上引起问题(但在实践中可能不会(,因为你的函数几乎是尾递归优化的候选者,但不是。更多在这里 哪个(如果有C++的话(编译器会进行尾递归优化?

当用户多次返回菜单时,这成为一个问题,它会耗尽您的程序内存,最终导致堆栈溢出错误。您可以在大多数 GUI/图形库中找到的常见模式是主循环模式。像这样:

int main() {
bool exit = false
while(!exit) {
int action = menu()
switch(action) {
case EXIT_SELECTION:  exit = true; break;
case SHOW_STATISTICS: printStats(); break;
}
}
}

每次调用函数时,程序都必须使用更多内存来跟踪与该函数调用相关的所有内容。通常,一旦一个函数结束,就会释放此内存,但是因为您的菜单函数调用另一个调用菜单函数的函数,该函数调用另一个函数...依此类推,您最终会耗尽所有函数调用的内存,因为这些函数在它们调用的函数终止之前无法终止 - 因此您的程序将崩溃。解决方案是使用 while 循环并检查用户输入的退出代码,如前面的响应者所述。它可能看起来像这样:

`void menu() {
char choice= '';
while(choice!= 3) {
std::cout << "Welcome to the menu!";
std::cout << "t Option 1 n";
std::cout << "t Option 2 n";
std::cout << "t Option 3 n";
std::cout << "Your option: ";
std::cin >> choice;
if(choice == 1) { /*do something*/ }
else if(choice == 2) { /*do something else*/ }
else if(choice == 3) { /*print a message and exit*/ }
else { /*bad choice -- try again*/ }
} //end while-loop
} //end menu()`

另外,请注意,函数的返回类型是void,根据定义,它不能有任何类型的返回。C++将允许您在 void 函数内部说return;,但这仅仅是当时和那里转义函数的一种方式,实际上并没有做更多的事情。在使用 void 函数时,以任何其他方式使用return都会令人困惑,并有导致大问题的风险。