代码可能有点长因为本人技术还不太行
一、问题描述:
用面向对象的方法(C++)设计并实现⼀个特殊计算器,具体功能包括:
(1)实现复数的加减乘除功能:
z1=a+bi,z2=c+di是任意两个复数
①和:z1+z2=(a+c)+(b+d)i
②差:z1-z2=(a-c)+(b-d)i
③积:z1z2=(ac-bd)+(bc+ad)i
④商:z1/z2=[(ac+bd)+(bc-ad)i]/(c^2 +d ^2)
(2)实现分数(有理数)的加减乘除、化简、转化成小数的功能:
z1=a/b,a2=c/d是两个任意的分数
①和:z1+z2=(ad+cb)/(bd)
②差:z1-z2=(ad-cb)/(bd)
③积:z1z2=(ac)/(bd)
④商:z1/z2=(ad)/(bc)
⑤化简(约分)
⑥转化成小数
二、代码实现
(一)复数部分
(1)类声明
class Complex{
private:
int image;
int real;
public:
Complex(int real=0,int image=0):real(real),image(image){}
friend Complex operator + (const Complex &c1, const Complex &c2);
friend Complex operator - (const Complex &c1, const Complex &c2);
friend Complex operator * (const Complex &c1, const Complex &c2);
friend Complex operator / (const Complex &c1, const Complex &c2);
void disp(){
cout<<this->real<<"+"<<this->image<<"i"<<endl;
}
};
(2)符号的重载
(这里是使用的方法是友元函数的方法,成员函数的方法在下面分数运算使用)
//友元重载复数+
Complex operator + (const Complex &c1, const Complex &c2){
Complex c11 (0,0);
c11.real=c1.real+c2.real;
c11.image=c1.image+c2.image;
return c11;
}
//友元重载复数-
Complex operator - (const Complex &c1, const Complex &c2){
Complex c22 (0,0);
c22.real=c1.real-c2.real;
c22.image=c1.image-c2.image;
return c22;
}
//友元重载复数*
Complex operator * (const Complex &c1, const Complex &c2){
Complex c33 (0,0);
c33.real=c1.real*c2.real-c1.image*c2.image;
c33.image=c1.image*c2.real+c1.real*c2.image;
return c33;
}
//友元重载复数/
Complex operator / (const Complex &c1, const Complex &c2){
Complex c44 (0,0);
c44.real=(c1.real*c2.real+c1.image*c2.image)/(c2.real*c2.real+c2.image*c2.image);
c44.image=(c1.image*c2.real-c1.real*c2.image)/(c2.real*c2.real+c2.image*c2.image);
return c44;
}
(二)分数(有理数)部分
(1)类声明
(约分、转化成小数和打印功能在类声明里面直接做了)
class Rational{
private:
int denominator;
int numerator;
public:
Rational(int numerator=0,int denominator=0):numerator(numerator),denominator(denominator){}
Rational operator + (const Rational &r2)const;
Rational operator - (const Rational &r2)const;
Rational operator * (const Rational &r2)const;
Rational operator / (const Rational &r2)const;
//约分 a/b
void optimization(Rational rat0){
int i,max,min,yueshu;
if(rat0.numerator==rat0.denominator){
cout<<1<<endl;
}
else{
if(rat0.numerator>rat0.denominator) {max=rat0.numerator;min=rat0.denominator;}
if(rat0.numerator<rat0.denominator) {max=rat0.denominator;min=rat0.numerator;}
for(i=1;i<=min;i++){
if((max%i)==0&&(min%i)==0){
yueshu=i;
}
}
cout<<rat0.numerator/yueshu<<"/"<<rat0.denominator/yueshu<<endl;
}
}
//转化成小(实)数
void real(){
double t;
t=static_cast<double>(numerator)/denominator;
cout<<setprecision(4)<<t<<endl;
}
void print(){
cout<<"计算结果是:"<<numerator<<"/"<<denominator<<endl;
}
};
(2)符号重载(成员函数方法)
//成员重载有理数+
Rational Rational::operator + (const Rational & other)const{
int n=this->numerator*other.denominator+denominator*other.numerator;
int d=this->denominator*other.denominator;
return Rational(n,d);
}
//成员重载有理数-
Rational Rational::operator - (const Rational & other)const{
int n=this->numerator*other.denominator-denominator*other.numerator;
int d=this->denominator*other.denominator;
return Rational(n,d);
}
//成员重载有理数*
Rational Rational::operator * (const Rational & other)const{
int n=this->numerator*other.numerator;
int d=this->denominator*other.denominator;
return Rational(n,d);
}
//成员重载有理数/
Rational Rational::operator / (const Rational & other)const{
int n=this->numerator*other.denominator;
int d=this->denominator*other.numerator;
return Rational(n,d);
}
主函数部分比较简单这里就不讲了,直接定义类的对象和调用函数就好了。
完整代码请到 https://download.csdn.net/download/JJL1307/12594606