有没有更好的方法来定义全局变量?

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作为成员变量和depositwithdraw作为成员函数的类。 【参考方案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 &amp;total) ...your code...

总的来说,我认为在每个函数中调用菜单并不是一个好主意。每次调用函数时,您都会将其推送到堆栈中,这会占用额外的内存。将存款和取款更改为无效并使用 main() 内部的 while(1) 循环来调用 menu() 会好得多。

【讨论】:

非常感谢您,我知道最终会通过堆叠菜单选项来咬我。你完美地回答了我的问题!非常感谢,谢谢。

以上是关于有没有更好的方法来定义全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

js如何在方法内部定义全局变量

java的全局变量都有哪些作用?

fortran 定义全局变量

自动化测试时需要使用python,请问如何理解python中的全局变量和局部变量?

我可以使用 __init__.py 来定义全局变量吗?

java全局变量清空?