1

我是我的第二门 OOP 课程的编程学生,该课程用 C++ 教授。我知道在代码中使用幻数通常是不好的做法,所以这是我的问题:

在我必须为这门课编写的下一个程序中,税表中有超过 120 个数字,我们需要使用它们来计算税金和其他相关信息。有这么多的数字,我是否为每个数字定义一个常数?或者还有什么我可以做的吗?

4

5 回答 5

8

常数比幻数更合适 -

但是,由于有这么多“常量”,以及随时间变化的东西(税表),我个人会通过配置文件加载这些,并使用某种类型的字典查找各个值。这将使无需重新编译就可以更轻松地适应新的税表。

于 2010-01-19T01:11:02.960 回答
3

想想你最终会得到什么样的数据结构,然后决定你需要什么常量或枚举。(不是税务专家,所以我在这里猜测一下)

各州的税率

 std::map<std::string, double> stateRates;
 stateRates["CA"] = 20.7;
 stateRates["MN"] = 1.2;
 ....

尽管有些人会枚举州名,但我认为这里不需要常量

 enum States
 {
     CA, MN
 };
 std::map<States, double> stateRates;
 stateRates[CA] = 20.7;
 stateRates[MN] = 1.2;

但是你还需要从字符串 CA 转换为枚举 CA

但是对于非表格的东西,你真的需要常量

 const int EXTRA_TAX_FOR_BIG_HOUSE = 2;
 const int BIG_HOUSE_LIMIT = 6000; // sqft

 if(houseSize > BIG_HOUSE_LIMIT)
    rate += EXTRA_TAX_FOR_BIG_HOUSE;
于 2010-01-19T01:22:08.847 回答
1

问题是,您的代码将如何使用它们?如果您真的必须编写代码以特定且独特的方式使用其中的每一个,那么您不妨将它们全部转换为常量。

另一方面,如果您遍历它们,某种关联数据结构(想想,“STL 映射”)可能会更有帮助。

另一个考虑因素:如果有人希望您的程序每隔一段时间消化一组新集合,那么您需要为names提供常量,以及使用values加载的数据结构。

于 2010-01-19T01:12:17.903 回答
1

通常通过这样的作业,您将学习如何从文件中读取/写入。然后,您可以将这些数字加载到数组或向量或您可能需要的任何内容中。如果您还没有学会从文件中读取和写入,那么学习起来相当简单。

这是您可以查看的教程,但通过快速谷歌搜索 http://fredosaurus.com/notes-cpp/io/readtextfile.html还有更多

于 2010-01-19T03:19:28.220 回答
0

Reed Copsey 有正确的答案,但我不知道答案是否足够清楚。

当你有这么多不同的“常量”时,最好将它们放在外部的东西中,比如文件或数据库。这些所谓的“常数”往往会发生变化:不同州的税率会随着立法机构决定他们需要更多的钱而发生变化。

如果您将这些幻数存储在一个文件中,然后使用ifstream来读取这些常量。如果您使用数据库来存储这些幻数,那么您需要阅读该数据库的文档。

您应该存储数字的内容取决于您使用它们的目的。例如,如果您只有州税,请使用 amap从州名(或缩写)转到其税率。

祝你好运!

于 2010-01-19T01:45:57.920 回答