c++运算符重载习题
Task8-1
/*
1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和*/
#include
using namespace std;
class Complex
{
public:
|
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
void display();
double real;
double imag;
};
void Complex::display()
{
cout<<"("< * } Complex operator +(Complex &c1,Complex &c2) { Complex p; =+; =+; return p; } int main() 】 { Complex c1(3,5),c2(2,5),c3; (); cout<<"+"; (); cout<<"="; c3=c1+c2; (); } ) Task8-2 /*2. 定义一个复数类Complex,重载运算符“+”、”-“、”*”、”/”, 使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数,编程,分别求两个复数之和差积商。 */ #include using namespace std; class Complex {public: ( Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2); Complex operator-(Complex &c2); Complex operator*(Complex &c2); Complex operator/(Complex &c2); void display(); private: double real; double imag; — }; Complex Complex::operator +(Complex &c2) {Complex c; =real+; =imag+; return c; } Complex Complex::operator -(Complex &c2) {Complex c; =; $ =; return c; } Complex Complex::operator *(Complex &c2) {Complex c; =real*; =imag*; return c; } Complex Complex::operator /(Complex &c2) " {Complex c; =(real*+imag*/*+*; =(imag**/*+*; return c; } void Complex::display() {cout<<"("< } int main() {Complex c1(3,4),c2(5,-10),c3; | c3=c1+c2; cout<<"c1+c2="; (); c3=c1-c2; cout<<"c1-c2="; (); c3=c1*c2; cout<<"c1*c2="; (); c3=c1/c2; [ cout<<"c1/c2="; (); return 0; } Task8-3 /* 3. 有两个矩阵a和b,均为n行m列(m、n的值自己给出), 求两个矩阵之和、差、积、商,重载运算符“+”、”-“、”*”、”/”, 使之能用于矩阵向加减乘除,如c=a+b、c=a*b。 ? */ #include #define n 2 #define m 3 using namespace std; class Matrix 在第三题的基础上,重载运算符>>和<<, 使之能用于该矩阵的输入和输出。 */ #include #define n 2 #define m 3 ~ using namespace std; class Matrix 实现分数类中的运 算符重载,在分数类中可以完成分数的加减乘除 (运算后再化简)、求反、比较(6种关系)的运算。 */ #include #include<> using namespace std; int gcd(int m,int n); class Fraction { 》 private: int nume; // 分子 int deno; // 分母 public: Fraction(int nu=0,int de=1); //构造函数,初始化用void Set(int nu=0,int de=1); //置值,改变值时用Fraction operator+(Fraction &c2); Fraction operator-(Fraction &c2); Fraction operator*(Fraction &c2); Fraction operator/(Fraction &c2); . bool operator>=(Fraction &c2); Fraction operator-(); void display(); void Simplify(); //化简(使分子分母没有公因子) }; Fraction::Fraction(int nu,int de) { if(de!=0) { … nume=nu; deno=de; } else { cout<<"格式错误,程序退出\n"; exit(0); } } ! void Fraction:: Set(int nu,int de) { if(de!=0) { nume=nu; deno=de; } } void Fraction::display() - { cout< } //求分子,分母最大公约数 int gcd(int m,int n) { int r; if(m { r=m; : m=n; n=r; } while(r=m%n) { if(r==0) break; m=n; n=r; } , return n; } //将分数化简 void Fraction::Simplify() { int n=gcd(nume,deno); nume=nume/n; deno=deno/n; cout< ? } Fraction Fraction::operator+(Fraction &c2) { Fraction c; =deno*; =nume*+*deno; } Fraction Fraction::operator-(Fraction &c2) { 》 Fraction c; =deno*; =nume* return c; } Fraction Fraction::operator*(Fraction &c2) { Fraction c; =deno*; =nume*; return c; ' } Fraction Fraction::operator/(Fraction &c2) { Fraction c; =deno*; =nume*; return c; } ( bool Fraction::operator>=(Fraction &c2) { nume=nume*; =*deno; if(nume>= return true; else return false; ^ } Fraction Fraction::operator-() { Fraction c; =-nume; =deno; } int main() { \ Fraction c1(1,2),c2(5,8),c; cout<<"c1="; (); cout<<"c2="; (); c=c1+c2; cout<<"c1+c2="; (); cout< c=c1-c2; cout<<"c1-c2="; (); cout< c=c1*c2; cout<<"c1*c2="; (); cout< c=c1/c2; cout<<"c1/c2="; (); cout< c=-c1; cout<<"-c1="; (); cout< if(c1>=c2) cout<<"c1>=c2"< }