c++ - 虚拟运算符 float()

标签 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);
}

最佳答案

该代码定义了一个类对象到 float 的隐式转换。多变的。当你做 cout << var << endl; operator floatvar 上调用对象将其转换为 floatfloat打印返回值。

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

关于c++ - 虚拟运算符 float(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5077203/

相关文章:

c++ - 使用 ofstream 打开文件时设置文件权限

c++ - 如何查找和替换字符串中所有出现的子字符串?

c++ - 如何将 QByteArray 转换为 std::istream 或 std::ifstream?

Prolog 运算符优先级

c++ - C++ 中的切片和运算符重载

c++ - 如何使用 Turbo C++ 编译器在 Notepad++ 中编译和调试 C++

c++ - std::string>>std::string 没有运算符 ">>"

python - 尝试在 Python 中使用运算符方法时出现类型错误

c++ - 模板上的重载算术运算符导致 Unresolved external 错误

c++ - 如何重载抽象类的运算符?