设计一个分数类(Fraction):数据成员包括分子(m_numerator)和分母(m_denominator),分子默认值为0,分母默认值为1。需要满足如下条件:
(1)具有分子和分母两个形参的构造函数;
(2)具有拷贝构造函数;
(3)实现计算分数值的操作;
(4)实现=运算符和*=运算符的重载;(成员函数)
(5)实现关系运算符==的重载,判断两个Fraction类是否相等;(普通函数)
(6)实现输入输出运算符的重载(友元函数);
(7)实现算术运算符/的重载,实现两个分数的除法运算(友元函数)。
运行结果如下:
代码如下:
#include <iostream>
using namespace std;
class Fraction
{
public:
double mFz;
double mFm;
//构造函数
Fraction(double fz=0,double fm=1){mFz=fz,mFm =fm;}
//拷贝构造函数
Fraction(Fraction &c){mFm=c.mFm;mFz=c.mFz;}
//计算分数值
double value()
{
if(mFm!=0)
return mFz/mFm;
else
return 0;
}
//
Fraction operator =(const Fraction c)
{
mFm=c.mFm;
mFz=c.mFz;
return *this;
}
Fraction operator *=(const Fraction c)
{
mFz *= c.mFz;
mFm *= c.mFm;
return *this;
}
bool operator ==(Fraction &c)
{
if(this->value() == c.value())
return true;
if(mFz == c.mFz && mFm==c.mFm)
return true;
else
return false;
}
friend ostream & operator<<( ostream & os,const Fraction & c);
friend istream & operator>>( istream & is,Fraction & c);
Fraction operator /(const Fraction b)
{
Fraction c;
c.mFz = mFz*b.mFz;
c.mFm = mFm*b.mFm;
return c;
}
};
ostream & operator<<( ostream & os,const Fraction & c)
{
os <<"("<< c.mFz << "/" << c.mFm<<")" ;
return os;
}
istream & operator>>(istream &is,Fraction &c)
{
char ch;
is >> c.mFz >> ch >> c.mFm;
return is;
}
int main()
{
Fraction a(2,3);
Fraction b(4,5);
cout << "a="<<a<<endl;
cout <<"b="<<b<<endl;
Fraction c = a; //拷贝构造函数
cout << "c="<<c <<endl; //显示c
c *= b;
cout <<"c*=b后 c="<< c<<endl; //显示乘以b后的数
if (c==b)
{
cout <<c<< "等于"<<b<<endl;
}else
cout << c<<"不等于"<<b<<endl;
Fraction d;
cout << "请输入一个分数:";
cin >> d; //输入d
cout << d<<endl; //输出
Fraction e = a/d;
cout <<a<<"/"<<d <<"="<<e<<endl;
return 0;
}
这不需要好办法啊,按照要求定义类和实现函数就好了啊。