操作符重载+ c++

Operator Overloading + c++

本文关键字:c++ 重载 操作符      更新时间:2023-10-16

所以我应该写一个程序,有num和num作为分数类的整数数据成员。我还应该有可以显示对象数据值的成员函数和+的重载操作符函数。我的程序说我的下标项是无效的数据类型,但我不知道如何允许没有它们的第二部分。有人知道我该怎么解决这个问题吗?我的代码如下:

    #include <iostream>
#include <cmath>
using namespace std;
int a, b, c;
class Fractions
{
    private:
 int num;
 int denom;
 public:
 Fractions(int=1, int=1);
 void operator!(void) const;
 Fractions operator+(const Fractions&) const;
};
Fractions::Fractions(int n, int d)
{
    if( d != 0)
    num= n;
    denom= d;
}
Fractions Fractions::operator+(const Fractions& f) const
{
    a= num/denom;
    b= num[1]/denom[1];
    c= a + b;
    c= (num * denom[1]+ denom * num[1])/(denom * denom[1]);
    return c;
}
int main()
{  
   return 0;
}

您已将numdenom声明为int,但在您的函数中,您将它们视为数组:b= num[1]/denom[1];

那不行。你想用这行b= num[1]/denom[1];做什么?要除以相加分数的值吗?如果是这样,也许你想要的是:b = f.num/f.denom;

我的代数不是最好的,但我不记得在添加分数时使用除法,但这可能是另一个问题(或者我可能错了)。

导致您指定的错误的最直接的问题是由于尝试做:

b= num[1]/denom[1];

将b、num和dom初始化为int,而不是整数数组。但是你试图像访问数组一样访问num和dom的元素。

要么为每个人初始化一个整数数组,要么放弃对他们的访问操作符,都可以修复这个错误,但我不认为这会给你想要的结果。

重载'+'操作符的方式将不起作用。由于成员中有'+'操作符,因此该类的对象成为操作符的左侧,而传递的(const Fractions& f)则成为右侧。

您根本没有使用传入的'f"变量,也没有影响该实例的成员。您所做的只是更改一些实际上没有必要的全局变量。我建议你仔细阅读操作符重载,因为你似乎不太明白它是如何工作的。