重载运算符不工作 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") { }
注意成员的初始化顺序——一般来说,按照成员声明的相同顺序初始化成员是一种很好的做法。
我对运算符重载有疑问。 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") { }
注意成员的初始化顺序——一般来说,按照成员声明的相同顺序初始化成员是一种很好的做法。