实验七:多态性(二)

更新时间:2023-09-09 22:55:01 阅读量: 教育文库 文档下载

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

福建农林大学金山学院实验报告

系(教研室):信息与机电工程系 专业: 计算机科学与技术 年级: 2009 实验课程: 蛮像对象程序设计 姓名: 黄伟河 学号: 092231048 实验室号 612 计算机号 J612S048 实验时间: 2010-12-8 指导教师签字: 成绩:

实验7 多态性(二)

一、实验目的和要求

(1)熟悉运算符重载的定义和使用方法。

(2)掌握用成员函数、友元函数重载运算符的方法。

二、实验内容和原理

1、定义一个复数类,通过重载运算符:*,/,直接实现二个复数之间的乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法“*”用成员函数实现重载,除法“/”用友元函数实现重载。(提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac–bd)+(ad+bc)i ;两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i )

2、在C++中,分数并不是预先定义的,需要建立一个分数类。要求:定义并实现一个分数类,编写分数输出函数print();通过重载运算符+、-、*、/对分数进行算术运算,通过重载运算符==实现判定两个分数是否相等。可自己再增加其他运算符重载函数。最后编写主函数测试。 提示:设有两个分数a/b和c/d,则有: (1)分数相加 分子=a*d+b*c;分母=b*d (2)分数相减 分子=a*d-b*c;分母=b*d (3)分数相乘 分子=a*c; 分母=b*d (4)分数相除 分子=a*d; 分母=b*c

三、实验环境

1. 硬件:PC机;

2. 软件:Windows操作系统、Visual C++ 6.0

四、算法描述及实验步骤 1、

#include class complex {

public: complex(){real=imag=0.0;}

complex(double r){real=r;imag=0.0;}

complex(double r,double i){real=r;imag=i;}

complex operator*(const complex &c);

friend complex operator/(const complex &c1,const complex &c2);

friend void print(const complex &c); private: double real,imag; };

inline complex complex::operator*(const complex &c)

{return complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);}

complex operator/(const complex &c1,const complex &c2)

{return complex((c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),

(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));}

void print(const complex &c)

{if(c.imag<0) cout<

{

complex c1(2.0),c2(3.0,-5.0),c3; c3=c1*c2; cout<<\print(c3); c3=c1/c2;

cout<<\print(c3); cout<

#include

#include #include class fraction { public:

fraction(int x=0,int y=1); void print();

friend fraction operator + (fraction&num1,fraction&num2); friend fraction operator - (fraction&num1,fraction&num2); friend fraction operator * (fraction&num1,fraction&num2); friend fraction operator / (fraction&num1,fraction&num2); friend bool operator==(fraction&num1,fraction&num2);

private: int n,d;

void optiminzation(); };

void fraction::optiminzation() {

int gcd,min,max; if(d==0)

{

cout<<\分母为零分数无意义\exit(1); }

gcd=(abs(n)>abs(d)?abs(d):abs(n)); if(gcd==0)return; if(abs(n)>abs(d)) {

max=n;min=d; }

else{min=n;max=d; } do

{

gcd=min%max;max=min;min=gcd;} while(gcd!=0); n/=max;d/=max; if(d<0) {n=-n;d=-d;} }

fraction::fraction(int x,int y) {n=x; d=y;

optiminzation(); }

void fraction::print() {

if(d==1) cout<

else cout<

fraction operator+(fraction&num1,fraction&num2) {

fraction temp;

temp.d=num1.d*num2.d;

temp.n=num1.n*num2.d+num1.d*num2.n; return temp;

}

fraction operator-(fraction&num1,fraction&num2) {

fraction temp;

temp.d=num1.d*num2.d;

temp.n=num1.n*num2.d-num1.d*num2.n; return temp; }

fraction operator*(fraction&num1,fraction&num2) {

fraction temp;

temp.d=num1.d*num2.d; temp.n=num1.n*num2.n; return temp;

}

fraction operator/(fraction&num1,fraction&num2) {

fraction temp;

temp.d=num1.d*num2.n; temp.n=num1.n*num2.d; return temp;

}

bool operator==(fraction&num1,fraction&num2) {

if(num1.n==num2.n&&num1.d==num2.d)return true; else return false; }

int main()

{

cout<<\测试数据********\fraction r1(4,8),r2(3,6),r3;

cout<<\原始数据:\cout<<\cout<<\化简后的数据:\cout<<\化简后的数据:\r3=r1+r2;

cout<<\r3=r1-r2;

cout<<\r3=r1*r2;

cout<<\r3=r1/r2;

cout<<\if(r1==r2)

cout<<\else

cout<<\≠r2\

cout<<\return 0; }

五、调试过程 1、

2、

六、实验结果 1、

2、

七、总结

1、学习了运算符重载的方法。

2、虽然程序可以运行,仍有部门问题无法理解

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

Top