【问题标题】:How to overload a function which calls an overloaded version of itself?如何重载调用自身重载版本的函数?
【发布时间】:2012-02-21 06:59:59
【问题描述】:
    Fraction Fraction::pow (Fraction frac, int power)
    {
        Fraction temp;
    temp.num = pow(frac.num, power);
    temp.den = pow(frac.den, power);

    return (temp);
    }
    // Assume that num and den are float and cmath is included

Fraction::pow, 内的 pow 实例期间,它采用 floatint 作为输入,应该给出 float,但它采用 Fraction 作为输入并引发错误。

【问题讨论】:

  • 您能否发布该类中所有pow 函数以及所有构造函数、复制赋值运算符和转换运算符的确切签名?
  • 显示pow的第二个重载定义。
  • 正如@Mat 所说的发布类和函数定义,你的Fraction 类很可能有一个转换构造函数,用于隐式转换导致调用不正确的函数,以确定为什么会发生这种情况,你需要向我们展示马特所说的细节。

标签: c++ operator-overloading overloading


【解决方案1】:

你可以尝试调用全局作用域pow 函数(我猜这就是你想要的):

temp.num = ::pow(frac.num, power);
temp.den = ::pow(frac.den, power);

左侧没有任何内容的作用域运算符 (::) 将调用全局作用域。当然,既然你包含了<cmath>,你也应该能够在std 命名空间中调用它们:

temp.num = std::pow(frac.num, power);
temp.den = std::pow(frac.den, power);

【讨论】:

    【解决方案2】:

    根据http://www.cplusplus.com/reference/clibrary/cmath/pow/,没有重载方法采用浮点数和整数,唯一将浮点数作为第一个参数的方法也将浮点数作为第二个参数。

    float pow (float base, float exponent);
    

    您的 Fraction 类是否有另一个重载版本的 pow?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多