重载运算符不工作 C++

Overloading Operators not working C++

我对运算符重载有疑问。 Bool 运算符工作正常,但其余运算符只是没有将正确的值传递给指定的对象。问题是,在使用 this 运算符并显示 Island 区域后,我得到的不是 "normal numbers",而是 -9.25596e+061。区域是 Island class 的属性。请帮忙。

下面是这些运算符的声明和其余代码:

Island operator + (const Island &island); // declaration in header file
Island& operator += (const Island &island);

Island Island::operator + (const Island &island) // in .cpp file
{
    Island Sum(); // default constructor which set area to 1
    Sum.area = area + island.area;
    return Sum;
}

Island & Island::operator += (const Island &island)
{
    area += island.area;
    return *this;
}

所以在主函数中,我通过默认构造函数创建了 3 个岛,我想测试我的运算符。 displayArea() 是来自 Island class.

的方法
Island2 += Island1; // operator +=
Island.displayArea();

Island3 = Island1 + Island2; //operator +
Island3.displayArea();

这是默认构造函数和 class。

Island::Island()
{
    islandName = "Name";
    double area = 1;
}

class Island{
    double area;
    string islandName;

public:
    Island();   //constructor
    displayArea();

可能的问题是您没有在 Island 的默认构造函数中正确设置 area 字段的值。虽然只是猜测。

编辑:猜对了。在您的默认构造函数中,您只需定义一个局部变量 area 并且根本不会影响实例的变量。默认构造函数应该如下所示:

Island::Island() : area(1), islandName("Name") { }

注意成员的初始化顺序——一般来说,按照成员声明的相同顺序初始化成员是一种很好的做法。