以下代码是关于C++的提问 ,麻烦帮忙看看该怎么解决好一点?

Design a composite class represents complex numbers whose real and imaginary parts
are Fractions.
1. Write appropriate constructors for this class;
2. Fractions should be able to add, subtract, multiple and divide.

人到中年有点甜
浏览 213回答 2
2回答

大话西游666

#ifndef COMPLEX_H#define COMPLEX_H#include <iostream>#include <iomanip>class Complex{public:Complex(double _real,double _imag = 0.0):real(_real),imag(_imag){} //构造函数,初始化列表和默认参数Complex(std::istream &is){is >> *this;}; //输入构造函数,调用自身的>>操作符void SetReal(double _real); //更改实部的值void SetImag(double _imag); //更改虚部的值void SetVal(double _real,double _imag); //更改整个复数inline double GetReal() const; //获取实部,常成员函数inline double GetImag() const; //获取虚部,常成员函数Complex& operator+=(const Complex &val); //成员操作符+=Complex& operator*=(const Complex &val); //成员操作符-=friend bool operator==(const Complex &lhs,const Complex &rhs); //友元函数,需访问私有数据friend std::istream& operator>>(std::istream &,Complex &); //友元输入操作符,需私有数据friend std::ostream& operator<<(std::ostream &,const Complex &); //友元输出操作符,需私有数据private:double real;double imag;};Complex operator+(const Complex &lhs, const Complex &rhs); //普通函数,实现两个复数+操作Complex operator*(const Complex &lhs, const Complex &rhs); //普通函数,实现两个复数*操作//========================分割线,此线上面为定义代码,此线下面是实现代码===============================inline bool operator==(const Complex &lhs,const Complex &rhs){return (lhs.real == rhs.real) && (lhs.imag == rhs.imag);}inline bool operator!=(const Complex &lhs,const Complex &rhs){return !(lhs==rhs);}inline Complex& Complex::operator+=(const Complex &val){real += val.real;imag += val.imag;return *this;}inline Complex operator+(const Complex &lhs,const Complex &rhs){Complex ret(lhs);ret += rhs;return ret;}inline Complex& Complex::operator*=(const Complex &val){double tReal = real;double tImag = imag;real = tReal*val.real - tImag*val.imag;imag = tReal*val.imag + tImag*val.real;return *this;}inline Complex operator*(const Complex &lhs,const Complex &rhs){Complex ret(lhs);ret *= rhs;return ret;}inline std::istream& operator>>(std::istream &is,Complex &com){std::cout << "请输入实数部分:" ;is >> com.real;if(is){std::cout << "请输入虚数部分:" ;is >> com.imag;if(is){return is;}else{com = Complex(0.0);}}else{com = Complex(0.0);}return is;}inline std::ostream& operator<<(std::ostream &os, const Complex &com){os << "复数为:" << com.real << std::showpos << com.imag << "i" << std::endl;return os;}inline double Complex::GetReal() const{return real;}inline double Complex::GetImag() const{return imag;}void Complex::SetReal(double _real){real = _real;}void Complex::SetImag(double _imag){imag = _imag;}void Complex::SetVal(double _real,double _imag){real = _real;imag = _imag;}#endif

Smart猫小萌

只实现了要求的基本加减乘除供参考#include&nbsp;<iostream>using&nbsp;namespace&nbsp;std;&nbsp;class&nbsp;complex&nbsp;{public:&nbsp;&nbsp;&nbsp;&nbsp;complex(double&nbsp;r&nbsp;=&nbsp;0,&nbsp;double&nbsp;i&nbsp;=&nbsp;0):real(r),&nbsp;imaginary(i){}&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;operator+(complex&nbsp;&a)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;t(*this);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.real&nbsp;+=&nbsp;a.real;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.imaginary&nbsp;+=&nbsp;a.imaginary;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;operator-(complex&nbsp;&a)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;t(*this);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.real&nbsp;-=&nbsp;a.real;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.imaginary&nbsp;-=&nbsp;a.imaginary;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;operator*(complex&nbsp;&a)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.real&nbsp;=&nbsp;a.real*real&nbsp;-&nbsp;a.imaginary*imaginary;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.imaginary&nbsp;=&nbsp;a.real*imaginary&nbsp;+&nbsp;a.imaginary*real;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;operator/(complex&nbsp;&a)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;t,&nbsp;t1(a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;div;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t1.imaginary*=&nbsp;-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;=&nbsp;a.real*a.real&nbsp;-&nbsp;a.imaginary&nbsp;*&nbsp;a.imaginary;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;a&nbsp;*&nbsp;*this;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.real&nbsp;/=&nbsp;div;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.imaginary&nbsp;/=&nbsp;div;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;ostream&nbsp;&operator&nbsp;<<&nbsp;(ostream&nbsp;&&nbsp;out,&nbsp;const&nbsp;complex&nbsp;&&nbsp;a);private:&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;real,&nbsp;imaginary;};&nbsp;ostream&nbsp;&operator&nbsp;<<&nbsp;(ostream&nbsp;&&nbsp;out,&nbsp;const&nbsp;complex&nbsp;&&nbsp;a){&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;<<&nbsp;'('&nbsp;<<&nbsp;a.real;&nbsp;&nbsp;&nbsp;&nbsp;if(a.imaginary>0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out<<'+';&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;<<&nbsp;a.imaginary&nbsp;<<&nbsp;"i)";&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;out;}int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;complex&nbsp;a(1,2),&nbsp;b(3,4);&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a&nbsp;<<&nbsp;'+'&nbsp;<<&nbsp;b&nbsp;<<&nbsp;'='&nbsp;<<&nbsp;a+b<<&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a&nbsp;<<&nbsp;'-'&nbsp;<<&nbsp;b&nbsp;<<&nbsp;'='&nbsp;<<&nbsp;a-b<<&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a&nbsp;<<&nbsp;'*'&nbsp;<<&nbsp;b&nbsp;<<&nbsp;'='&nbsp;<<&nbsp;a*b<<&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a&nbsp;<<&nbsp;'/'&nbsp;<<&nbsp;b&nbsp;<<&nbsp;'='&nbsp;<<&nbsp;a/b<<&nbsp;endl;}
打开App,查看更多内容
随时随地看视频慕课网APP