我想知道以下代码中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);
}
答案 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。