Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

? 發問時間: 電腦與網際網路程式設計 · 5 年前

非常緊急,請拜託幫幫忙 定義一個類別:分數(class Fraction),其私有資料成員為整數之分母(denominator) x 與 分子(numerator) y,並多載「+」、「-」、「*」、「/」以進行分數的運算。可參考第二題程式 (注意:分子分母要約分。)?

(上述題目不考慮分母為0的例外狀況)

第二題的程式

Matrix2D operator++() {a11++; a12++; a21++; a22++; return *this; }; Matrix2D

operator++(int) { Matrix2D TempObj; TempObj=*this; a11++; a12++; a21++; a22++;return

TempObj;};void Display();};void Matrix2D::Display(){ cout << "| "<< a11 << " , " <<

a12 << " |" << endl;

cout << "| "<< a21 << " , " << a22 << " |" << endl;}int main(void)

{ Matrix2DObjA,ObjB,ObjC,ObjD; cout << "原本ObjA=" << endl;

ObjA.Display(); cout << "ObjB=" << endl; ObjB.Display(); cout << "經ObjB=++ObjA;運算

後" << endl;ObjB=++ObjA; cout << "ObjA=" << endl;ObjA.Display();cout << "ObjB=" <<

endl;

ObjB.Display();cout << "=============" << endl; cout << "原本ObjC=" << endl;

ObjC.Display();cout << "ObjD=" << endl ObjD.Display();

cout << "經ObjD=ObjC++;運算後" << endl; ObjD=ObjC++; cout << "ObjC=" << endl;

ObjC.Display();cout << "-------------" << endl;cout << "ObjD=" << endl; ObjD.Display();

1 個解答

評分
  • 5 年前

    #include <iostream>

    using namespace std;

    int gcd(int a, int b){

    if(0>a) a=-a;

    if(0>b) b=-b;

    int n[2]={a,b};

    bool i;

    for(i=n[0]>n[1];n[i];i=!i)n[!i]%=n[i];

    return n[!i];

    }

    class FR {

    public:

    int y,x;

    FR():y(0),x(1){}

    FR(int n,int d):y(n),x(d){int g=gcd(x,y);if(g){x/=g;y/=g;}}

    ~FR(){}

    FR operator+(FR b){

    FR r;

    r.x=x*b.x;

    r.y=x*b.y+y*b.x;

    int g=gcd(r.x,r.y);

    if(g){r.x/=g;r.y/=g;}

    return r;

    }

    FR operator-(FR b){

    FR r;

    r.x=x*b.x;

    r.y=y*b.x-x*b.y;

    int g=gcd(r.x,r.y);

    if(g){r.x/=g;r.y/=g;}

    return r;

    }

    FR operator*(FR b){

    FR r;

    r.x = x*b.x;

    r.y = y*b.y;

    int g=gcd(r.x,r.y);

    if(g){r.x/=g; r.y/=g;}

    return r;

    }

    FR operator/(FR b){

    FR r;

    r.x = x*b.y;

    r.y = y*b.x;

    int g=gcd(r.x,r.y);

    if(g){r.x/=g; r.y/=g;}

    return r;

    }

    void show(){

    cout<<"("<<y<<","<<x<<")"<<endl;

    }

    };

    int main(void){

    (FR(3,12)+FR(7,12)).show();

    (FR(7,12)+FR(8,12)).show();

    (FR(7,12)-FR(11,12)).show();

    (FR(11,12)-FR(7,12)).show();

    (FR(7,12)*FR(8,12)).show();

    (FR(7,12)/FR(8,12)).show();

    return 0;

    }

    test$ ./fr

    (5,6)

    (5,4)

    (-1,3)

    (1,3)

    (7,18)

    (7,8)

還有問題?馬上發問,尋求解答。