我的一项考试运动任务有一点问题。这是一段文字:


  MyFloat类具有一个私有变量float num。您必须编写启用下一行代码的方法:
      MyFloat x = 3.5;
      MyFloat y = x + 3.2
      浮点z = 3.4 + y


我写这段代码:

#include <iostream>
#include <Windows.h>
using namespace std;

class MyFloat
{
    float num;
public:
    MyFloat(float n)
    {
        num = n;

    }
    MyFloat operator+(MyFloat x)
    {
        float result;
        result = x.num + this->num;
        return result;
    }
};

int main()
{
    MyFloat x = 3.75;
    MyFloat y = x + 3.2;
    float z = 3.4 + y;
    system("PAUSE");
}


我在这一行出现错误:

float z = 3.4 + y;


它说:


  错误C2677:二进制'+':找不到类型为'MyFloat'的全局运算符(或者没有可接受的转换)


我该怎么办?如何解决这个问题呢???

最佳答案

这可以是一个解决方案:

class MyFloat
{
    float num;
public:
    MyFloat(float n)
    {
        num = n;
    }

    operator float() const {
        return num;
    }
};

int main()
{
    MyFloat x = 3.75;
    MyFloat y = x + 3.2f;
    float z = 3.4f + y;
}


最初,我还打算将MyFloat operator+(MyFloat, MyFloat)设置为非成员朋友函数,但仍然无法实现

float z = 3.4 + y;

编译。原因是3.4 + y将是MyFloat类型,因此,除非您提供从float zMyFloat的转换运算符,否则您不能将其分配给float。但是,3.4f + y变得模棱两可(至少在VS 2010中如此),因为它可以调用MyFloat operator+(MyFloat, MyFloat)或可以将y转换为float并将内置运算符+用于float

关于c++ - 在C++中重载operator +,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18641212/

10-11 02:29