虚拟运算符float()

时间:2011-02-22 10:57:33

标签: c++ operators operator-overloading

我想知道以下代码中virtual operator float()方法的含义, 它用于铸造吗?

#include <iostream>

class Frac
{
  protected:
int a, b;
  public: 
    Frac(int x, int y):a(x),b(y)
    {}

    virtual operator float()
     {  return (float)a/b; }

    friend void Print(Frac var)
     {   std::cout << var << endl; }
};


class TwiceFrac : public Frac
{
  public:
    TwiceFrac():Frac(1,2)
{}
    virtual operator float()
{ return (float)a/b * 2; }
};

int main()
{
    TwiceFrac obj;
    Print(obj);
}

3 个答案:

答案 0 :(得分:3)

代码将类的对象的隐式转换定义为float变量。执行cout << var << endl;后,operator float对象上会调用var将其转换为float并打印返回的float值。

virtual关键字允许派生类覆盖基类中定义的函数。要利用此多态性,您需要更改Print函数的签名以获取Fanc的引用(即Print(Franc& var))。然后,根据传递给函数的对象的类型,将调用相应的operator float

答案 1 :(得分:1)

是的,你是对的。这个用于铸造的算子:)

答案 2 :(得分:0)

这不起作用,因为您在“打印”功能中切片

您需要让Print功能参考。更优选地,它使用const引用并使隐式类型转换方法也为const。