有没有更好的方法来定义全局变量?
Posted
技术标签:
【中文标题】有没有更好的方法来定义全局变量?【英文标题】:Is there a better way to define a global variable? 【发布时间】:2020-10-28 15:17:10 【问题描述】:我正在寻找一种更好的方法来定义全局变量。这只是一个用于练习使用功能的小型银行应用程序。这是根据 C++ 标准定义变量的正确方法吗?我不是 100% 确定这一点。我在main()
之外定义了它,但如果我没记错的话,这是不可以的。我尝试创建类,我尝试为函数创建参数,这是我弄清楚如何将变量传递给所有函数的唯一方法。
// banking.cpp : This file contains the 'main' function. Program execution begins and ends there.
#include <iostream>
using namespace std;
int total = 100;
void menu();
int deposit();
int withdraw();
int main()
menu();
return 0;
void menu()
int selection;
cout << "your total money right now is $" << total << endl;
cout << "select 1 for deposit." << endl;
cout << "select 2 for withdraw" << endl;
cin >> selection;
switch (selection)
case 1:
deposit();
break;
case 2:
withdraw();
break;
int deposit()
int depositAmount;
cout << "your current total is $" << total << endl;
cout << "how much would you like to deposit? " << endl;
cin >> depositAmount;
total = depositAmount + total;
cout << "your new total is $" << total << endl;
cout << "you will be returned to the main menu..." << endl;
menu();
return total;
int withdraw()
int withdrawAmount;
cout << "your current total is $" << total << endl;
cout << "how much would you like to withdraw? " << endl;
cin >> withdrawAmount;
total = total - withdrawAmount;
cout << "your new total is $" << total << endl;
cout << "you will be returned to the main menu..." << endl;
menu();
return total;
【问题讨论】:
不鼓励使用非常量全局变量,但您声明它的语法是正确的。 参见How to declare a global variable in C++,但在这种特定情况下,您可以使用局部变量并将其作为函数参数传递。 我正在寻找一种更好的方式来定义一个全局变量——“全局变量”和“更好”是两个不能一起出现的短语。 我想你已经声明了全局变量。并且以同样的方式声明全局变量的唯一正确方法 - 尽可能不要声明和使用它。 这看起来最好有一个以total
作为成员变量和deposit
和withdraw
作为成员函数的类。
【参考方案1】:
如果您需要存储跨函数共享的状态,您可能希望创建一个类/结构,其中成员作为您要共享的数据。
class MyClass
public:
void menu();
int deposit();
int withdraw();
private:
int total = 100;
;
然后在你想运行你的逻辑时使用这个类。
int main()
MyClass myclass;
myclass.menu();
return 0;
【讨论】:
进一步改进:将menu()
转回免费功能。它是银行应用程序的一部分,但不是银行帐户的一部分。 +1。【参考方案2】:
您可以将 total 传递给前面带有 & 的函数。它在 C++ 中称为引用,您可以在函数内修改给定对象,而不仅仅是它的副本。 Examples。在您的代码中:
int deposit(int &total) ...your code...
总的来说,我认为在每个函数中调用菜单并不是一个好主意。每次调用函数时,您都会将其推送到堆栈中,这会占用额外的内存。将存款和取款更改为无效并使用 main() 内部的 while(1) 循环来调用 menu() 会好得多。
【讨论】:
非常感谢您,我知道最终会通过堆叠菜单选项来咬我。你完美地回答了我的问题!非常感谢,谢谢。以上是关于有没有更好的方法来定义全局变量?的主要内容,如果未能解决你的问题,请参考以下文章