c++运算符重载和多态性实验报告

更新时间:2023-10-17 01:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验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 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;

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() {

本文来源:https://www.bwwdw.com/article/oi2f.html

Top