Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;?_C++_Constexpr_Fractions - Fatal编程技术网

C++ 如何在c++;?

C++ 如何在c++;?,c++,constexpr,fractions,C++,Constexpr,Fractions,我创造了一个分数: class Fraction { private: int numarator_, denum_; public: constexpr Fraction(int numarator, int denum=1) noexcept : numarator_(numarator), denum_(denum) {} virtual ~Fraction() = default; 我想创建一个函数,把一个数字加到一个特定的分数上,就像这样: int main(

我创造了一个分数:

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;
}
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
        
    }

是的,构造函数和函数add必须是constexpr

当您将
number
添加到分数时,您需要添加
number
分母的单位:

constexpr Fraction add(const int number)
{
    return Fraction(numarator_ + number * denum_, denum_);
}

换句话说。不需要创建临时的
分数*
指针。并注意函数返回值的类型更改。

数字
添加到分数时,需要添加分母的
数字
单位:

constexpr Fraction add(const int number)
{
    return Fraction(numarator_ + number * denum_, denum_);
}

换句话说。不需要创建临时的
分数*
指针。并注意函数返回值的类型更改。

您使用的是指针,而没有初始化

您应该返回一个
分数
而不是
双精度

此外,您可能需要减少分数。如果是这样,您可以使用
std::gcd()
,它在
#include
中定义(需要C++17)

constexpr分数相加(const int number)
{
int newNumetator=numrator+number*denum;
常数int g=std::gcd(新分子,密度);
新分子/=g;
新分母常数=denum\ug/g;
返回分数(新分子、新分母);
}

您正在使用指针而没有初始化

您应该返回一个
分数
而不是
双精度

此外,您可能需要减少分数。如果是这样,您可以使用
std::gcd()
,它在
#include
中定义(需要C++17)

constexpr分数相加(const int number)
{
int newNumetator=numrator+number*denum;
常数int g=std::gcd(新分子,密度);
新分子/=g;
新分母常数=denum\ug/g;
返回分数(新分子、新分母);
}

什么是numitor?为什么要声明一个未初始化的
分数
指针,然后访问它?您是否知道正确的拼写(至少在英语中)是“分子”和“分母”(如果您使用的是基于另一种语言的名称,请忽略我)?您的
add()
函数声明一个指针,但是在使用它之前千万不要初始化它-因此行为是未定义的。一个注释是,您可能不想为添加函数返回一个
double
。相反,将其作为分数返回,然后创建一个转换函数,如:
运算符double()const{return…}
也可以重载数学运算符,而不是使用
add()
减号()
什么是
numitor
?为什么要声明一个未初始化的
分数
指针,然后访问它?您是否知道正确的拼写(至少在英语中)是“分子”和“分母”(如果您使用的是基于另一种语言的名称,请忽略我)?您的
add()
函数声明一个指针,但是在使用它之前千万不要初始化它-因此行为是未定义的。一个注释是,您可能不想为添加函数返回一个
double
。相反,将其作为分数返回,然后创建一个转换函数,如:
运算符double()const{return…}
也可以重载数学运算符,而不是使用
add()
减号()
,我个人会编写一个
double
转换运算符,返回
numrator\denum
。或者另一个名为
asDouble()
的函数。我个人会编写一个
double
转换运算符,返回
numarator\u/denum\u
。或者另一个名为
asDouble()
的函数。