重载运算符不能正常工作C ++

时间:2015-03-21 21:48:17

标签: c++ operators

我遇到运算符重载问题。 Bool运算符正常工作,但其余的只是没有将正确的值传递给指定的对象。问题是,在使用this运算符并显示Island的区域后,而不是“正常数字”,我会得到类似-9.25596e+061的内容。 Area是Island类的属性。请帮忙。

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

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;
}

所以在main函数中我默认构造函数创建了3个岛,我想测试我的运算符。 displayArea()是Island类的一个方法。

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

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

这是默认的构造函数和类。

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

class Island{
    double area;
    string islandName;

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

1 个答案:

答案 0 :(得分:0)

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

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

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

请注意成员初始化的顺序 - 通常,按照声明成员的顺序初始化成员是一种很好的做法。