当前位置: 首页 > 知识库问答 >
问题:

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

闻人和歌
2023-03-14

我正在寻找一种更好的方法来定义一个全局变量。这只是一个练习使用功能的小型银行app。这是按照C++标准定义变量的正确方法吗?这件事我不是百分百确定。我在main()之外定义了它,但是如果我没有记错的话,这是一个no no。我试着创建类,我试着为函数创建参数,这是我能弄清楚如何得到所有函数的变量的唯一方法。

// 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;
}

共有2个答案

骆文华
2023-03-14

如果您需要存储跨函数共享的状态,那么您可能希望创建一个类/结构,其中成员作为您希望共享的数据。

class MyClass
{
public:
   void menu();
   int deposit();
   int withdraw();

private:
   int total = 100;
};

然后无论何时要运行逻辑,都可以使用这个类。

int main()
{
    MyClass myclass;
    myclass.menu();
    return 0;
}
上官自明
2023-03-14

您可以将total传递给带有&;在它前面。它在C++中被称为引用,你可以在一个函数中修改给定的对象,而不仅仅是它的复制。例子。在您的代码中:

int存款(int&total){。。。您的代码。。。}

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

 类似资料:
  • 我正在创建一个JSP. tag文件来处理这个用例: 其中,行为将是获取请求参数,转义其值以“安全”使用,并将转义值放回某个作用域(例如请求),与参数同名(尽管它可能是另一个名称)。 我有一个可以工作的实现,但我有scriptlet,因为我找不到在JSTL中使用变量名的方法。但我不是JSTL向导,所以我想看看我是否缺少语法/方法。这是正在工作的文件: (我真希望艾尔能自动逃脱。)

  • 除了把它们全部输入外,还有没有更好的方法在字符串中列出它们?

  • 除了把它们全部输入外,还有没有更好的方法在字符串中列出它们?

  • 假设我有一个用户模式/模型,用户有一个朋友列表。Mongoose希望您将好友列表(外键/ObjectID类型)存储为数组,对吗?这意味着如果我想通过ID找到我的朋友,Mongoose将搜索数组,直到找到具有我想要的ID的朋友的第一个实例。那似乎真的是时间低效,不是吗?有更好的办法吗?

  • 问题内容: 是否有一个很好的方法来Map 获取和忽略案件? 问题答案: TreeMap扩展了Map并支持自定义比较器。 字符串提供默认的不区分大小写的比较器。 所以: 比较器不考虑区域设置。在其JavaDoc中阅读有关它的更多信息。

  • 问题内容: 似乎有很多方法可以在Python中定义单例。关于堆栈溢出是否有共识? 问题答案: 我没有真正的需要,因为具有功能(而不是类)的模块可以很好地用作单例。它的所有变量都将绑定到模块,该模块无论如何都无法重复实例化。 如果您确实希望使用类,则无法在Python中创建私有类或私有构造函数,因此,您只能通过使用API​​的约定来保护自己免受多重实例化。我仍然将方法放在模块中,并将模块视为单例。

  • 我做这个迭代是为了对DataFrame的每个值执行不同的函数: 作为xxx一个2列数据帧

  • 问题内容: 我目前正在使用以下功能比较字典值。有更快或更更好的方法吗? 编辑:两个字典包含相同的键。 问题答案: 如果字典具有相同的键集,并且您需要所有这些打印件以实现任何值差异,那么您将无能为力。也许像这样: 几乎等同于您所拥有的,但是您可能会得到更好的演示,例如在循环使用diffkey之前对其进行排序。