永发信息网

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

答案:1  悬赏:40  手机版
解决时间 2021-11-20 02:32
C++ Rational类,就是分数类,如何实现约分?
最佳答案
你的构造函数中,变量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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
百明门窗的质量好不好
江准汽车国五车断气杀在行驶中突然亮起并发有
正宗满煎糕的做法,满煎糕怎么做好吃又简单
裤子尺寸,腰围66-81cm是什么意思,到底是66c
囬简笔字是什么?
为什么这么多人知道千亿国际?
短文为什么用"野藤,枯萎了
什么的检阅台我不知道,这个对于我来说很难喔
一个圆形茶几桌面的直径是一米,它的面积是多
谢安琪十二月二十二歌词
广联达图形算量中暗柱用框架柱画的怎么办
你好,在美国转机转机需要过境签证好办吗?如
强生理发室地址在哪,我要去那里办事,
汉族和羌族在待遇上有什么区别
口字加一笔有哪些字
推荐资讯
上海资申精密模具有限公司怎么样?
女主凰染秋后重生到北宫雪身上,男主叫第一问
2017河源会计继续教育开始考了吗
请问怎样利用公垂线求空间内两直线间的距离
佳木斯到成都的k548火车的靠窗车号
我两相怎用电八千瓦,用六十安的空开,为什么怎
去日本旅游很贵吗?哎跟北京上海哪个更贵?
6Q教育是传销的吗?
格式控制符%3.0f是什么意思,怎么理解
金鱼嘴怎么做?
如何在扣扣里面领免费七天的黄钻和绿钻
如何让四个6加运算符号和括号等于111
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?