1、实验5 运算符重载与多态性 班级 学号 姓名 郑成绩 一、实验目的 1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法 3.理解并掌握利用虚函数实现动态多态性和编写通用程序的方法 4.掌握纯虚函数和抽象类的使用 二、实验内容 1.复数类加减法乘除运算 (用成员函数定义运算符重载)。 复数类的定义: class complex //复数类声明 { public: //外部接口 complex(double r=0.0,double i=0.0) //构造函数 {re
2、al=r,imag=i;} complex operator +(complex c2); //运算符"+"重载成员函数 complex operator - (complex c2); //运算符"-"重载成员函数 complex operator *(complex ); //运算符"*"重载成员函数 complex operator /(complex); //运算符"/"重载成员函数 complex operator =(complex c2); //运算符"="重载成
3、员函数
void display(); //输出复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
实际程序:
#include
4、0.0) //构造函数 {real=r,imag=i;} complex operator +(complex c2); //运算符"+"重载成员函数 complex operator - (complex c2); //运算符"-"重载成员函数 complex operator *(complex c2 ); //运算符"*"重载成员函数 complex operator /(complex c2); //运算符"/"重载成员函数 complex operator=(comp
5、lex c2); //运算符"="重载成员函数 void display(); //输出复数 private: //私有数据成员 double real; //复数实部 double imag; //复数虚部 }; complex complex::operator+(complex c2) { double R=real+c2.real; double I=imag+c2.imag; return complex(R,I); } com
6、plex complex:: operator - (complex c2) { double R=real-c2.real; double I=imag-c2.imag; return complex(R,I); } complex complex::operator *(complex c2) { double R=real*c2.real-imag*c2.imag; double I=real*c2.imag+imag*c2.real; return complex(R,I); } complex complex::operator /(compl
7、ex c2) { double R=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); double I=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return complex(R,I); } complex complex::operator=(complex c2) { double R=c2.real; double I=c2.imag; return complex(R,I); } void
8、complex::display()
{
cout< 9、
cout<<"c1+c2=";
c5.display();
complex c6=c1-c3;
cout<<"c1-c3=";
c6.display();
complex c7=c1*c4;
cout<<"c1*c4=";
c7.display();
complex c8=c1/c2;
cout<<"c1/c2=";
c8.display();
complex c9=c4;
cout<<"c9=c4=";
c9.display();
}
2.复数类比较运算 (用友元函数定义运算重载)。
注意:
1)复 10、数类比较运算按复数的模比较两个复数的大小。
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,compl 11、ex 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( ); 12、 //显示复数的值
private: //私有数据成员
double real;
double imag;
};
实际程序:
#include 13、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 o 14、perator !=(complex c1,complex c2); //运算符"!="重载友元函数
void display( ); //显示复数的值
private: //私有数据成员
double real;
double imag;
};
int operator> (complex c1,complex c2)
{
double A=sqrt(c1.real*c1.real+c1.imag*c1.imag);
double B=sqrt(c2.real*c2.real+c2.imag*c2.imag);
15、
if (A>B)
return 1;
else
return 0;
}
int operator>=(complex c1,complex c2)
{
double A=sqrt(c1.real*c1.real+c1.imag*c1.imag);
double B=sqrt(c2.real*c2.real+c2.imag*c2.imag);
if (A>=B)
return 2;
else
return 0;
}
int operator<(complex c1,complex c2)
{
double A=sqrt(c1.real*c1.real+c1. 16、imag*c1.imag);
double B=sqrt(c2.real*c2.real+c2.imag*c2.imag);
if (A 17、ator==(complex c1,complex c2)
{
if (c1.real==c2.real&&c1.imag==c2.imag)
return 1;
else
return 0;
}
int operator!=(complex c1,complex c2)
{
double A=sqrt(c1.real*c1.real+c1.imag*c1.imag);
double B=sqrt(c2.real*c2.real+c2.imag*c2.imag);
if (c1.real!=c2.real||c1.imag!=c2.imag||A!=B)
return 18、 1;
else
return 0;
}
void complex::display()
{
cout< 19、
cout<<"d5=";d5.display();
cout<<"d6=";d6.display();
cout<<"d7=";d7.display();
a=d1>d2;
b=d1>=d4;
c=d1==d2;
d=d1 20、< 21、 Shape
{public:
virtual float Area( void) =0; //纯虚函数,求面积
virtual void show(void) =0; //纯虚函数,显示数据
};
因面积的计算依赖于几何图形,故在类中只能定义一个纯虚函数Area。同理,设置输出数据的函数show也只能定义为纯虚函数。
把这个基类派生出其它几何图形类。如派生出的三角形类为:
class Triangle:public Shape
{ float W,H; //三角形边长为W,高为H
public:
Triangl 22、e(float w=0,float h=0){ W=w; H = h; }
float Area( void){ return W*H/2; }
void show()
{ cout<<"\n三角形:"<<" 边长:"< 23、virtual float Area( void) =0; //纯虚函数,求面积
virtual void show(void) =0; //纯虚函数,显示数据
};
class Triangle:public Shape
{ float W,H; //三角形边长为W,高为H
public:
Triangle(float w=0,float h=0){ W=w; H = h; }
float Area( void){ return W*H/2; }
void show()
{ cout<< 24、"\n三角形:"<<" 边长:"< 25、uxing(float w=0,float h=0){ W=w; H = h; }
float Area(){return W*H;}
void show()
{cout<<"\n矩形:"<<" 长:"< 26、" 边长:"<






