Bob*_*lan 2 c++ switch-statement
我只是在学习C++和编程.我正在创建一个名为的类Distance.我想允许用户(程序员使用),我的班级能够将距离从一个度量单位转换为另一个度量单位.例如:英寸 - >厘米,英里 - >公里等......
我的问题是我希望有一个被调用的方法ConvertTo将转换为任何度量单位.
这是我到目前为止所拥有的:
// unit_of_measure is an enum containg all my supported lengths,
// (eg. inches, centimeters, etc...)
int Distance::ConvertTo(unit_of_measure convert_unit)
{
switch (convert_unit)
{
case inches:
if (unit != inches) {
if (unit == centimeters) {
distance *= CM_TO_IN;
unit = inches;
return 0;
} else {
cerr << "Conversion not possible (yet)." << endl;
return 1;
}
} else {
cout << "Warning: Trying to convert inches to inches." << endl;
return 2;
}
case centimeters:
if (unit != centimeters) {
if (unit == inches) {
distance /= CM_TO_IN;
unit = centimeters;
return 0;
} else {
cerr << "Conversion not possible (yet)." << endl;
return 1;
}
} else {
cout << "Warning: Trying to convert inches to inches." << endl;
return 2;
}
// I haven't written anything past here yet because it seems
// like a bad idea to keep going with this huge switch
// statement.
default:
cerr << "Undefined conversion unit." << endl;
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
那我该怎么办?我应该解决这个问题,还是继续讨论什么才能成为巨大的转换声明.
将其分解为功能.你拥有的东西将很难维护和使用.对于用户和程序员来说,使用具有描述性名称的函数会更方便:
double inchesToCentimeters(double inches);
double centimetersToInches(double cent);
Run Code Online (Sandbox Code Playgroud)
函数名称确切地告诉您要调用的函数,并且不需要传递跟踪单位的额外参数.
另外,为了防止必须跟踪测量单位,最好始终将数字存储在程序中的公共单位中,然后仅在需要时转换为显示单位.例如,我现在正在维护的程序将所有距离值保持为米,但可以转换为您能想到的任何距离单位.
使用通用单元时,可以节省大量的功能.假设您的公共距离单位是米,现在一旦您编写从米转换到您需要的每个其他单位的功能,并且从所有其他单位转换为米,您可以将它们组合起来从任何单位 - 到米 - 到任何其他单位.
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |