实验5 运算符重载和多态性
班 级
学号(最后两位)
姓 名
成 绩
一、实验目的
1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法
3.理解并掌握利用虚函数实现动态多态性和编写通用程序的方法 4.掌握纯虚函数和抽象类的使用 二、实验内容
1.复数类加减法乘除运算 (用成员函数定义运算符重载)。 复数类的定义: class complex //复数类声明 { public: //外部接口 complex(double r=0.0,double i=0.0) //构造函数 {real=r,imag=i;}
complex operator +(complex c2); //运算符\重载成员函数 complex operator - (complex c2); //运算符\重载成员函数 complex operator *(complex ); //运算符\重载成员函数 complex operator /(complex); //运算符\重载成员函数 complex operator =(complex c2); //运算符\重载成员函数 void display(); //输出复数 private: //私有数据成员 double real; //复数实部 double imag; //复数虚部 };
实验代码:
#include
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;
c.real=real+c2.real;
c.imag=imag+c2.imag; return c; }
Complex Complex::operator-(Complex &c2) {
Complex c;
c.real=real-c2.real; c.imag=imag-c2.imag; return c; }
Complex Complex::operator*(Complex &c2) {
Complex c;
c.real=real*c2.real-imag*c2.imag;
c.imag=imag*c2.real+real*c2.imag; return c; }
Complex Complex::operator/(Complex &c2) {
Complex c;
c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c; }
void Complex::display()
{cout<<\int main() {
Complex c1(4,6),c2(3,7),c3; cout<<\ c1.display(); cout<<\ c2.display(); int i,j=1; while(j) {
cout<<\
cout<<\复数之和\\n\ cout<<\复数之差\\n\ cout<<\复数之积\\n\
cout<<\复数之商\\n\cout<<\退出\\n\ cout<<\请选择(0--4) \
cin>>i; switch(i) {
case 1: c3=c1+c2;
cout<<\break;
case 2: c3=c1-c2; cout<<\c3.display();break; case 3: c3=c1*c2; cout<<\
c3.display(); break;
case 4: c3=c1/c2; cout<<\c3.display(); break; case 0: j=0; break; } } }
测试结果:
2.复数类比较运算 (用友元函数定义运算重载)。 注意:
1)复数类比较运算按复数的模比较两个复数的大小。
2)复数相等判断当两个复数的实部和虚部都相等,两个复数才相等,否则不相等。
类的定义
class complex //复数类声明 {
public: complex(double r=0.0,double i=0.0)
{real=r;imag=i;} //构造函数
friend int operator> (complex c1,complex c2); //运算符\重载友元函数
friend int operator>=(complex c1,complex c2); //运算符\重载友元函数 friend int operator <(complex c1,complex c2); //运算符\重载友元函数 friend int operator<=(complex c1,complex c2); //运算符\重载友元函数 friend int operator ==(complex c1,complex c2); //运算符\重载友元函数 friend int operator !=(complex c1,complex c2); //运算符\重载友元函数 void display( ); //显示复数的值 private: //私有数据成员 double real; double imag; };
实验代码:
#include\#include\
class complex {
public:
complex(double r=0.0,double i=0.0) {
real=r;imag=i;
}
friend bool operator> (complex c1,complex c2);
friend bool operator>=(complex c1,complex c2);
friend bool operator< (complex c1,complex c2); friend bool operator<=(complex c1,complex c2); friend bool operator==(complex c1,complex c2); friend bool operator!=(complex c1,complex c2); void display( ); private: double real; double imag; };
bool operator>(complex c1,complex c2) {
if(sqrt(c1.real*c1.real+c1.imag*c1.imag)>sqrt(c2.real*c2.real+c2.imag*c2.imag)) return true; else
return false; }
bool operator>=(complex c1,complex c2) {
if(sqrt(c1.real*c1.real+c1.imag*c1.imag)>sqrt(c2.real*c2.real+c2.imag*c2.imag)||sqrt(c1.real*c1.real+c1.imag*c1.imag)==sqrt(c2.real*c2.real+c2.imag*c2.imag)) return true; else
return false; }
bool operator<(complex c1,complex c2) {
if(sqrt(c1.real*c1.real+c1.imag*c1.imag) return false; } bool operator<=(complex c1,complex c2) { if(sqrt(c1.real*c1.real+c1.imag*c1.imag) return false; } bool operator==(complex c1,complex c2) { if(c1.real==c2.real&&c1.imag==c2.imag) return true; else return false; } bool operator!=(complex c1,complex c2) { if(c1.real!=c2.real||c1.imag!=c2.imag) return true; else return false; } void complex::display() { cout<<\} void compare(complex &c1,complex &c2) { if(operator>(c1,c2)==1) {c1.display();cout<<\ {c1.display();cout<<\ {c1.display();cout<<\ {c1.display();cout<<\ {c1.display();cout<<\{c1.display();cout<<\ int main() {