问题描述
我创建了一个小数部分:
class Fraction
{
private:
int numarator_,denum_;
public:
constexpr Fraction(int numarator,int denum=1) noexcept : numarator_(numarator),denum_(denum) {}
virtual ~Fraction() = default;
int main()
{
Fraction fr(9,4);
double res=fr.add(5);
std::cout<<res;
}
我真的不知道如何处理它。.作为原理,我知道它是如何工作的,但是我做错了..如果我可以添加分数f作为参数,那会很好,但是我不能,那就是我必须做。 我试图做这样的事情:
constexpr double add(const int number)
{
Fraction* fr;
int numarator2=number* fr->denum_;
return Fraction(fr->numarator_ + numarator2,fr->denum_); //here i return a fraction and i kNow i must return a double,the result but i am comfused
}
解决方法
将number
添加到分数时,需要添加number
的分母单位:
constexpr Fraction add(const int number)
{
return Fraction(numarator_ + number * denum_,denum_);
}
换句话说。无需创建该临时Fraction*
指针。并注意函数返回值的类型更改。
,
您正在使用指针而不进行初始化。
您应该返回Fraction
而不是double
。
此外,您可能会减少分数。如果是这样,您可以使用std::gcd()
中定义的#include <numeric>
(需要C ++ 17)。
constexpr Fraction add(const int number)
{
int newNumetator = numarator_ + number * denum_;
const int g = std::gcd(newNumerator,denum_);
newNumerator /= g;
const int newDenominator = denum_ / g;
return Fraction(newNumerator,newDenominator);
}