永发信息网

C++ Rational类,就是分数类,如何实现约分?

答案:1  悬赏:40  手机版
解决时间 2021-11-20 02:32
  • 提问者网友:人傍凄凉立暮秋
  • 2021-11-19 13:44
C++ Rational类,就是分数类,如何实现约分?
最佳答案
  • 五星知识达人网友:洎扰庸人
  • 2021-11-19 15:12
你的构造函数中,变量a,b是哪里来的,你的约分函数中根本就没有把ab传出来

约分函数按这你样的写法,在里面再写两句SetNumerator(a);SetDenominator(b);
基本就可以把约分函数当成构造函数了
如果你想让约分函数在类外面可以调用的话,约分函数根本没必要带参数,里面的再次赋值完全是多此一举,你完全可以在约分函数里面去调用私有变量,假如numer,denom就是私有变量名,那么这个函数可以写成
void Rational::Reduce() {
int tmp=gcd(numer, denom);
numer/=tmp;
denom/=tmp;
}
这样在构造函数里面
Rational::Rational(int numer, int denom) {
//构造函数

SetNumerator(a);
SetDenominator(b);
Reduce();

}追问我这样写,放在构造函数里面是可以的,可是放在那个
Rational Rational::Add(const Rational &r) const {
....
Reduce(temp1,temp2);
...

这样就会在Reduce下面有一条红线,显示
对象含有与成员函数Rational::Reduce不兼容的类型限定符

主要是为什么Reduce不能放到Add函数里面去啊?追答如果你在构造函数里面已经自动进行约分处理了,完全不需要在Add中约分,因为
return Rational(temp1, temp2);的时候会自动进行约分处理的
另外,如果一定要在Add中约分也不是不可以,只不过你的Reduce函数写错了,起不到约分的作用
void Rational::Reduce(int &numer, int &denom) {
//int b = numer; 不要再次将numer,denom赋给另外一个值
//int a = denom; 你传引用的原因不就是为了改numer和denom,重新定义局部变量去处理达不到
//改变引用的目的
int tmp=gcd(numer, denom); //先用个变量把最大公约数存下来
//都除以最大公约数
numer/=tmp;
denom/=tmp;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯