我是第二个OOP课程的编程学生,用C ++教授。我知道在代码中使用幻数通常是不好的做法,所以这是我的问题:
在下一个我必须为这个课程编写的程序中,税表中有超过120个数字给我们,我们需要使用它们来计算税收和其他相关信息。如此大量的数字,我为每个数字定义一个常量吗?或者我还能做些什么吗?
答案 0 :(得分:8)
常数比魔术数字更合适 -
然而,由于许多“常量”,以及随时间变化的东西(税表),我个人会通过配置文件加载这些,并使用某种类型的字典查找单个值。这样可以更容易地调整到新的税表而无需重新编译。
答案 1 :(得分: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;
答案 2 :(得分:1)
问题是,您的代码将如何使用它们?如果你真的必须编写以特定和特殊的方式使用其中每一个的代码,那么你也可以将它们全部转换为常量。
另一方面,如果你遍历它们,某种关联数据结构(想想,'STL map')可能会更有帮助。
还有一个考虑因素:如果有人希望你的程序经常消化一个新的集合,那么你需要 names 的常量,以及你用值加载的数据结构
答案 3 :(得分:1)
通常使用此类作业,您将学习如何从文件中读取/写入。然后,您可以将这些数字加载到数组或向量或您可能需要的任何内容中。如果您没有从文件中学习过读写,那么选择起来相当简单。
这是一个你可以看到的教程,但还有更多的快速谷歌搜索 http://fredosaurus.com/notes-cpp/io/readtextfile.html
答案 4 :(得分:0)