1

我正在用 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”,它应该适用于所有涉及单位乘法或除法的类似计算。

我的构造函数采用两个双精度和一个字符串,并相应地将它们分配给成员。

4

1 回答 1

0

使用如下记录:

struct Unit {
    int meters;
    int seconds;
/*...*/
};

其中每个字段代表某个基本单位的功率。因此,例如对于加速度,您将有米=1,秒=-2。

于 2020-04-19T16:22:58.897 回答