Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。
非常緊急,請拜託幫幫忙 定義一個類別:分數(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 個解答
- prisoner26535Lv 75 年前
#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)