【问题标题】:using Friend function and operator+ to add class variables and print out使用 Friend 函数和 operator+ 添加类变量并打印出来
【发布时间】:2015-11-29 09:13:07
【问题描述】:

我编写了一个代码,它接受 3 个整数(整数、分子和分母)的输入并将它们显示为“a{b/c}” 我已经定义/声明了一个类(分数),其中包含这 3 个单独的整数变量以及读取和打印它们的函数。 为了存储这些不同的输出中的几个,我创建了一个定义的类类型的动态数组。 我想将所有值加在一起,例如 fract[0].a + frac[1].a .. etc 用于整数部分,并找到小数部分的总和,然后显示。

对于类声明,我包含了一个友元函数:

friend fraction operator +(fraction, fraction);

我还声明了 2 个分数类型的动态数组

fraction* fracarry = new fraction[x];
fraction* fractot = new fraction[1];

fracarry 存储输入的分数,fractot 初始化为:

numerator = 0;
denominator = 1;
integral = 0;

友元函数定义如下:

fraction operator+(fraction, fraction)
{
for(int i = 0; i < x; i++)
{
 fractot[0].denominator += fracarry[i].denominator*fractot[0].denominator;
 fractot[0].integral += fracarry[i].integral;
 fractot[0].numerator += ((fracarry[i].numerator*fractot[0].denominator) + (fractot[0].numerator*fracarry[i].denominator));
}

 return fractot[0];
}

其中 x 是来自用户的输入,表示将输入多少个分数。

主要功能是:

cout << " Please input how many fractions you will be inputting: " << endl;
cin >> x;


fraction *fracarry = new fraction[x];
fraction *fractot = new fraction[1];


fracarry[0].read();

fractot[0] = fractot[0] + fracarry[0];

fractot[0].print2();

我不确定是否应该在函数定义或主函数中添加循环。它符合要求并且读取/打印功能可以工作,但我无法让它显示 fractot.print2() 作为存储在 fracarry 中的值的最终总和

我不想要确切的代码,只想要任何关于我可能出错/查找什么的提示,或者任何可能有帮助的教程等

谢谢!

**编辑 这是同一个问题,但我试图减少不相关的代码/使其更符合要求!

【问题讨论】:

  • 注意: += 不是 =+ 。我现在没有时间阅读所有内容。
  • 请发帖Minimal, Complete, and Verifiable example。您有很多与核心问题无关的代码。
  • 这段代码有太多错误。尝试一次解决一个问题。
  • 如果您养成以有意义的方式布局代码的习惯,例如“=+”而不是“+=”,您将更容易发现错别字。使用一致的缩进样式,不要随意放置空行。
  • @RSahu 谢谢,我知道很多我只是不确定问题出在打印功能还是朋友功能上,但会再次发布

标签: c++ class dynamic-arrays friend-function


【解决方案1】:

我认为您的问题出在以下几行:

fractot[0].integral =+ fracarry[j].integral;
fractot[0].numerator =+ fracarry[j].numerator;

为了将参数与它自己的值相加,你必须这样写:+=

【讨论】:

  • 这是一个问题,但还有更多问题。比如1/2 + 1/3 不是2/5
  • @BoPersson 我认为它回到初级数学,而不是代码:)
  • @BoPersson 是的,我一开始已经说过,我只是想弄清楚如何直接对它们求和,然后在朋友的定义中继续 (yb + az)/z*b功能。也谢谢,但我也尝试过这种编码,它只是想返回最后一个输入分数,据我所知,没有发生求和。友元函数的定义方式有问题吗?
  • 我有点困惑,当你定义一个函数时,你要放置一个类型为分数的特定对象,是你放置的名称(例如,对于我的代码'fracarry',在定义?谢谢
  • @ConnorLarson 我可以解决我认为上述代码有问题的任何问题,对不起,但我无法从逻辑上修复您的代码,如果您想将某些内容与它自己以前的值相加,您应该使用语法@ 987654325@ 而不是=+ 我无法通过这样定义fraction 函数来理解你的意思,你所说的朋友函数是什么意思?你为什么不直接定义它?
猜你喜欢
  • 2020-02-11
  • 2014-03-05
  • 2021-01-06
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多