我是我的第二门 OOP 课程的编程学生,该课程用 C++ 教授。我知道在代码中使用幻数通常是不好的做法,所以这是我的问题:
在我必须为这门课编写的下一个程序中,税表中有超过 120 个数字,我们需要使用它们来计算税金和其他相关信息。有这么多的数字,我是否为每个数字定义一个常数?或者还有什么我可以做的吗?
我是我的第二门 OOP 课程的编程学生,该课程用 C++ 教授。我知道在代码中使用幻数通常是不好的做法,所以这是我的问题:
在我必须为这门课编写的下一个程序中,税表中有超过 120 个数字,我们需要使用它们来计算税金和其他相关信息。有这么多的数字,我是否为每个数字定义一个常数?或者还有什么我可以做的吗?
常数比幻数更合适 -
但是,由于有这么多“常量”,以及随时间变化的东西(税表),我个人会通过配置文件加载这些,并使用某种类型的字典查找各个值。这将使无需重新编译就可以更轻松地适应新的税表。
想想你最终会得到什么样的数据结构,然后决定你需要什么常量或枚举。(不是税务专家,所以我在这里猜测一下)
各州的税率
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;
问题是,您的代码将如何使用它们?如果您真的必须编写代码以特定且独特的方式使用其中的每一个,那么您不妨将它们全部转换为常量。
另一方面,如果您遍历它们,某种关联数据结构(想想,“STL 映射”)可能会更有帮助。
另一个考虑因素:如果有人希望您的程序每隔一段时间消化一组新集合,那么您需要为names提供常量,以及使用values加载的数据结构。
通常通过这样的作业,您将学习如何从文件中读取/写入。然后,您可以将这些数字加载到数组或向量或您可能需要的任何内容中。如果您还没有学会从文件中读取和写入,那么学习起来相当简单。
这是您可以查看的教程,但通过快速谷歌搜索 http://fredosaurus.com/notes-cpp/io/readtextfile.html还有更多