*Copyright(c) 2016.烟台大学计算机与控制工程学院
*ALL rights reserved.
*文件名称:main.cpp
*作者:孙亚茹
*完成日期:2016年6月1日
*问题描述:在(1)的基础上实现分数类的对象和整型数的四则运算。
*//
#include <iostream>
#include <Cmath>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu=0,int de=1):nume(nu),deno(de) {}
void huajian();
friend istream &operator>>(istream &in,CFraction &x);
friend ostream &operator<<(ostream &out,CFraction &x);
CFraction operator + (double &d);
CFraction operator - (double &d);
CFraction operator * (double &d);
CFraction operator / (double &d);
};
void CFraction::huajian()
{
int t,m,n;
m=deno;
n=nume;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
deno/=m;
nume/=m;
}
istream &operator>>(istream &in,CFraction &c1)
{
char ch;
while(1)
{
cin>>c1.nume>>ch>>c1.deno;
if(c1.deno==0)
cout<<"分母不能为0,请重输"<<endl;
else if(ch!='/')
cout<<"格式错误,请重输"<<endl;
else
break;
}
return cin;
}
ostream &operator<<(ostream &out,CFraction &c1)
{
cout<<c1.nume<<'/'<<c1.deno;
return cout;
}
CFraction CFraction:: operator + (double &d)
{
CFraction c;
c.deno=deno;
c.nume=d*deno+nume;
return c;
}
CFraction CFraction::operator - (double &d)
{
CFraction c;
c.deno=deno;
c.nume=d*deno-nume;
return c;
}
CFraction CFraction::operator * (double &d)
{
CFraction c;
c.deno=deno;
c.nume=d*nume;
return c;
}
CFraction CFraction::operator / (double &d)
{
CFraction c;
c.deno=nume;
c.nume=d*deno;
return c;
}
int main()
{
CFraction c1,c3;
double d;
cout<<"请输入一个分数:"<<endl;
cin>>c1;
cout<<"请输入一个整型数:"<<endl;
cin>>d;
cout<<"下面进行计算:"<<endl;
cout<<endl;
c3=c1+d;
cout<<"x+"<<d<<"= "<<c3<<endl;
c3=c1-d;
cout<<"x-"<<d<<"= "<<c3<<endl;
c3=c1*d;
cout<<"x*"<<d<<"= "<<c3<<endl;
c3=c1/d;
cout<<"x/"<<d<<"= "<<c3<<endl;
cout<<endl;
return 0;
}
总结:
整型和分数不同,整型不是类的对象但可以通过传参和类的对象进行运算。要注意区分形参是对象,形参是整型数,两个形参时不同情况的区别。
出错原因还是成员函数实现时格式不对,要把两个冒号写在类名和函数名之间。