在c ++中重载转换运算符

时间:2015-03-02 03:35:27

标签: c++ operator-overloading

当一个operator函数被实现为一个成员函数时,大多数操作数必须是operator

#include<iostream>
    using namespace std;
    class ffloat {
      private:
        float a;
      public:
        ffloat():a(34.566){}
        operator int () {
          return a=static_cast<int >(a);
        }
     };

     int main() {
       ffloat w;
       int x;
       x=w;
       cout<<x<<endl;
     }

左边的操作数是可变的,那么为什么编译器没有发送错误 提前谢谢....

2 个答案:

答案 0 :(得分:2)

operator int()是转换函数,其唯一的操作数是隐含的&#39;这个&#39;论点。因此x=w没有违反规则,因为x不是转换的操作数。这部分是为什么写int(w)这里没有丢失操作数的原因。您所指的规则是关于&#39; + - * /&#39;等运营商的规则。它可以有2个操作数。

答案 1 :(得分:0)

实际上,a=static_cast<int >(a)表示a应该从float a转换为整数,然后将其作为整数返回。

一切都有效,您的运营商int应该返回int