我正在用 C++ 编写一个进行基本科学计算和测量的类。我有三个成员变量,值(双),不确定性(双)和单位(字符串),并有重载的运算符,如 +、-、/ 和 *。
Measurement operator+(const Measurement& m1, const Measurement& m2);
Measurement operator-(const Measurement& m1, const Measurement& m2);
Measurement operator*(const Measurement& m1, const Measurement& m2);
Measurement operator/(const Measurement& m1, const Measurement& m2);
看起来像这样:
Measurement operator+(const Measurement& m1, const Measurement& m2){
if (m1.unit == m2.unit){
double val = m1.value + m2.value;
double uncert = (sqrt(pow(m1.uncertainty, 2)+pow(m2.uncertainty, 2)));
string unit = m1.unit;
return Measurement(val, uncert, unit);
}throw invalid_argument("Units do not match!");
}
其余的运算符看起来也很相似,只是稍作调整,我正确地得到了值和不确定性,但我在单位的乘法和除法上苦苦挣扎。假设我有:
Measurement m_a(120.0, 3.0, "m");
Measurement m_b(20.0, 1.2, "sec");
Measurement m_c = m_a/m_b;
现在我希望 m_c 的单位为“m sec^-1”,它应该适用于所有涉及单位乘法或除法的类似计算。
我的构造函数采用两个双精度和一个字符串,并相应地将它们分配给成员。