64,650
社区成员
发帖
与我相关
我的任务
分享
//fenshu.h
class Fenshu
{
public:
Fenshu( int a = 1, int b = 2 ); //***例1请重点看这里****
~Fenshu();
Fenshu operator+( const Fenshu& a );//***例1请重点看这里****
void Show();
int gys();//***公约数函数,例2请重点看这里****
int yuefen();
private:
int fz;
int fm;
};
//fenshu.cpp
#include <iostream>
#include "fenshu.h"
void Fun( Fenshu *p );
using namespace std;
int gys( int a, int b )
{
if ( b == 0 ) return a;
return gys( b, a%b );
}
Fenshu::Fenshu( int a , int b ) : fz(a), fm(b)
{
yuefen();
}
Fenshu::~Fenshu()
{
}
Fenshu Fenshu::operator+( const Fenshu& a )
{
/*正常的做法:
Fenshu t;
t.fm = fm * a.fm;
t.fz = fz * a.fm + a.fz * fm;
t.yuefen();
return t;
*/
return FenShu(fz * a.fm + a.fz * fm, fm * a.fm) ; //***例1请看这里,直接返回一个匿名对象***
}
int Fenshu::yuefen()
{
int g = gys();
fz /= g;
fm /= g;
if ( fm < 0 )
{
fz = -fz;
fm = -fm;
}
}
int Fenshu::gys()
{
return ::gys( fz, fm );
}
void Fenshu::Show()
{
cout << fz << '/' << fm << endl;
}
//main.cpp
#include <iostream>
#include "fenshu.h"
using namespace std;
int main()
{
cout << Fenshu( 12, 16 ).gys() << endl; //例2请重点看这里,直接输出12和16的公约数
(Fenshu(1,8)+Fenshu(3,8)).Show();//例1请重点看这里,直接输出12和16的公约数
(Fenshu(1,2)+Fenshu(1,3)).Show();//例1请重点看这里,直接输出12和16的公约数
return 0;
}