/*如果需要测试混合运算的话可以使用Check函数中注释的代码,或者作修改;
如果使用的是vc++6.0或其他比较就的编译器,应当把
#include
using namespace std;
改为#include
并且把Check函数中得if语句删除;*/
#include
using namespace std;
class Fraction{
friend Fraction operator+(Fraction&, int);
friend Fraction operator+(int, Fraction&);
friend Fraction operator-(Fraction&, int);
friend Fraction operator-(int, Fraction&);
friend Fraction operator*(Fraction&, int);
friend Fraction operator*( int,Fraction&);
friend Fraction operator/(Fraction&, int);
friend Fraction operator/(int,Fraction&);
public:
void Print();
Fraction(int , int );
Fraction(Fraction&);
Fraction operator+(Fraction&);
Fraction operator-(Fraction&);
Fraction operator*(Fraction&);
Fraction operator/(Fraction&);
private:
void Simple();
int nume;
int deno;
};
Fraction::Fraction(int a, int b):nume(a),deno(b){
Simple();
}
Fraction::Fraction(Fraction&f){
nume = f.nume;
deno = f.deno;
}
void Fraction::Simple(){
int bo = 1;
if (nume < 0)
{
nume *= -1;
bo *= -1;
}
if (deno < 0){
deno *= -1;
bo *= -1;
}
int i = 2;
while (i <= nume){
if (nume%i == 0 && deno%i == 0){
nume /= i;
deno /= i;
i = 1;
}
i++;
}
nume *= bo;
}
void Fraction::Print(){
Simple();
if (nume == 0)
cout << 0 << endl;
else if (deno == 1)
cout << nume << endl;
else
cout << nume << "/" << deno << endl;
}
Fraction Fraction::operator+(Fraction&f){
Fraction f2(*this);
f2.deno *= f.deno;
f2.nume = f2.nume*f.deno + f.nume*deno;
return f2;
}
Fraction Fraction::operator-(Fraction&f){
Fraction f2(*this);
f2.deno *= f.deno;
f2.nume = f2.nume*f.deno - f.nume*deno;
return f2;
}
Fraction Fraction::operator*(Fraction&f){
Fraction f2(*this);
f2.deno *= f.deno;
f2.nume = nume*f.nume;
return f2;
}
Fraction Fraction::operator/(Fraction&f){
Fraction f2(*this);
f2.deno *= f.nume;
f2.nume = nume*f.deno;
return f2;
}
Fraction operator+(Fraction&f,int i){
Fraction f2(i, 1);
return f + f2;
}
Fraction operator+(int i, Fraction&f){
return operator+(f, i);
}
Fraction operator-(Fraction&f, int i){
Fraction f2(i, 1);
return f - f2;
}
Fraction operator-(int i, Fraction&f){
Fraction f2(i, 1);
return f2 - f;
}
Fraction operator*(Fraction&f,int i){
Fraction f2(i, 1);
return f*f2;
}
Fraction operator*(int i, Fraction&f){
return operator*(f, i);
}
Fraction operator/(Fraction&f, int i){
Fraction f2(i, 1);
return f / f2;
}
Fraction operator/(int i, Fraction&f){
Fraction f2(i, 1);
return f2 / f;
}
void Check(){
int nume1, deno1, nume2, deno2,i;
cout << "输入测试的数据:(注意:分母不能为0,分子、分母为正整数或负整数)\n";
cout << "输入第一个测试分数的分子:\n";
cin >> nume1;
cout << "输入第一个测试分数的分母:\n";
cin >> deno1;
cout << "输入第二个测试分数的分子:\n";
cin >> nume2;
cout << "输入第二个测试分数的分母:\n";
cin >> deno2;
cout << "输入测试的整数\n";
cin >> i;
if (deno1 == 0 || deno2 == 0)
throw runtime_error("分母不能为0");
Fraction f1(nume1, deno1),f2(nume2,deno2);
cout <<"("<< nume1 << "/" << deno1 <<")"<< "+" << "("<<nume2 << "/" << deno2<<")" << "= ";
(f1 + f2).Print();
cout << "(" << nume1 << "/" << deno1 << ")" << "-" << "(" << nume2 << "/" << deno2 << ")" << "= ";
(f1 -f2).Print();
cout << "(" << nume1 << "/" << deno1 << ")" << "*" << "(" << nume2 << "/" << deno2 << ")" << "= ";
(f1 *f2).Print();
cout << "(" << nume1 << "/" << deno1 << ")" << "/" << "(" << nume2 << "/" << deno2 << ")" << "= ";
(f1 / f2).Print();
cout << "(" << nume1 << "/" << deno1 << ")+(" << i << ")= ";
(f1 + i).Print();
cout << "(" << nume1 << "/" << deno1 << ")-(" << i << ")= ";
(f1 - i).Print();
cout << "(" << nume1 << "/" << deno1 << ")*(" << i << ")= ";
(f1 * i).Print();
cout << "(" << nume1 << "/" << deno1 << ")/(" << i << ")= ";
(f1 / i).Print();
cout <<"("<< i << ")+(" << nume2 << "/" << deno2 << ")" << "= ";
(i + f2).Print();
cout <<"("<< i << ")-(" << nume2 << "/" << deno2 << ")" << "= ";
(i - f2).Print();
cout <<"("<< i << ")*(" << nume2 << "/" << deno2 << ")" << "= ";
(i * f2).Print();
cout <<"("<< i << ")/(" << nume2 << "/" << deno2 << ")" << "= ";
(i / f2).Print();
/*int nume3, deno3, nume4, deno4;
cout << "输入第三个测试分数的分子:\n";
cin >> nume3;
cout << "输入第三个测试分数的分母:\n";
cin >> deno3;
cout << "输入第四个测试分数的分子:\n";
cin >> nume4;
cout << "输入第四个测试分数的分母:\n";
cin >> deno4;
Fraction f3(nume3, deno3), f4(nume4, deno4);
cout << "((" << nume1 << "/" << deno1 << ")+(" << nume2 << "/" << deno2 << ")-(" << i << "))*(";
cout << nume3 << "/" << deno3 << ")/(" << nume4 << "/" << deno4 << ")= ";
((f1 + f2 - i)*f3 / f4).Print();*/
}
int main(){
Check();
return 0;
}
导致插上诸如声卡等扩展卡后主板没有响应而无显
温馨提示:答案为网友推荐,仅供参考