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()
的函数。