【问题标题】:Overloading Operators not working C++重载运算符不工作 C++
【发布时间】:2015-05-25 03:44:37
【问题描述】:

我遇到了运算符重载的问题。布尔运算符工作正常,但其余的只是没有将正确的值传递给指定的对象。问题是在使用this 运算符并显示Island 的区域后,我得到的不是“正常数字”,而是-9.25596e+061。面积是来自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;
}

所以在主函数中,我通过默认构造函数创建了 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();

【问题讨论】:

  • 带有 main() 函数和预期输出的完整代码示例可以帮助人们回答。
  • 我们可以看看你的头文件吗?您是否在类定义中声明了运算符重载函数?
  • 这不是你真正的代码,它永远不会编译。 Island Sum(); 是一个函数声明。
  • 这不是你的真实代码,它甚至无法编译。 Island Sum(); 向前声明一个名为 Sum 的函数,没有参数并返回 Island
  • 这是一个大项目,我只为其中的一小部分寻求帮助。它的编译没有任何问题。

标签: c++ operators


【解决方案1】:

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

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

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

注意成员的初始化顺序——一般来说,按照声明成员的相同顺序初始化成员是一个好习惯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2013-09-26
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多