首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运算符重载+ c++

运算符重载+ c++
EN

Stack Overflow用户
提问于 2014-03-17 11:05:14
回答 2查看 109关注 0票数 1

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

代码语言:javascript
复制
    #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;
}
EN

回答 2

Stack Overflow用户

发布于 2014-03-17 11:10:23

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-03-17 11:27:09

导致您指定的错误的最直接问题是尝试执行以下操作:

代码语言:javascript
复制
b= num[1]/denom[1];

您将b、num和denom初始化为int,而不是整数数组。但是您正在尝试访问一个num和denom元素,就好像它们是数组一样。

不管是为每个函数初始化一个整数数组,还是删除它们的访问操作符,都可以修复这个错误,但我不相信这会给你带来你想要的结果。

重载'+‘运算符的方式将不起作用。因为您有'+‘运算符作为成员,所以该类的对象成为运算符的左侧,而您传递给(const Fractions& f)的对象成为右侧。

你根本没有使用你传入的‘f’变量,也没有影响到该实例的成员。你所做的只是改变了一些实际上不必要的全局变量。我建议你阅读一下运算符重载,因为你似乎不太了解它是如何工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22446249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档