当前位置:文档之家› 西安交大C++程序设计第十章作业

西安交大C++程序设计第十章作业

西安交通大学实验报告课程__计算机程序设计__实验名称__多态性__第 1 页共 44 页系别____ ______ 实验日期 2014 年 5 月 31 日专业班级__ ____组别_____________ 实验报告日期 2014 年 5 月 31 日姓名___ _____学号_ _ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的理解掌握多态的使用方法,学会用虚函数。

二、实验内容(一)第一题:定义一个类Base,该类含有虚函数display,然后定义它的两个派生类FirstB和SecondB,这两个派生类均含有公有成员函数display,在主程序中,定义指向基类Base的指针变量ptr,并分别定义Base、FirstB、Second的对象b1、f1、s1,让ptr分别指向b1、f1、s1的起始地址,然后指向执行这些对象的成员函数display。

1.源程序代码:#include<iostream>using namespace std;class Base{public:virtual void display(){cout<<"sound!sound!sound!";}};class FirstB:public Base{public:void virtual display(){cout<<"miao!miao!miao!";}};class SecondB:public Base{public:void virtual display(){cout<<"wang!wang!wang!";}};int main(){Base *ptr;Base b1;FirstB f1;SecondB s1;cout<<"指向基类Base:\t";ptr=&b1;ptr->display();cout<<"\n指向派生类FirstBase:\t";ptr=&f1;ptr->display();cout<<"\n指向派生类SecondB:\t";ptr=&s1;ptr->display();cout<<endl;return 0;}2.实验结果:(二)第二题:扩充例10-5,从中派生一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。

1.源程序代码:验结果:(三)第三题:扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。

从键盘输入你的生日,如果今天是你的生日则显示:“Harry Birthday!”否则显示“还有**天是你的生日”或者“你的生日已经过去了** 天,距离明年生日还有**天”。

1.源程序代码:<<endl;cout<<"Please input your birthday:";int a,b;cin>>a>>b;Date birthday(a,b);(birthday);cout<<endl;return 0;}2.实验结果:四、第四题:完成上一章实验第5题红颜色的函数功能:5、采用继承方式定义一个三层生日蛋糕类,不论基类还是派生类都至少包含 5 个函数:构造函数、设置数据成员函数、求蛋糕体积、运算符 > 重载函数、输出生日祝词与蛋糕形状函数。

并编写主函数测试各成员函数。

继承方式如下:首先定义圆柱体形状蛋糕类,只有 3 个数据成员,半径、高、生日祝词。

然后派生出圆柱体 _ 方柱体蛋糕类,即在圆柱体形状上增加方柱体形状。

假定方柱体的正方形面积小于圆柱体的圆形面积,注意方柱体的高与正方形的边长不一定相等。

再用圆柱体 _ 方柱体蛋糕类派生出圆柱体 _ 方柱体 _ 菱形体蛋糕类,即在方柱体形状上增加菱形柱体形状。

假定菱形柱体的菱形面积小于方柱体的正方形面积。

提示:①?运算符 > 重载指两个蛋糕对象的体积大小。

?②基类和派生类数据成员不能定义为 public 。

③设置数据成员函数、求蛋糕体积、求蛋糕表面积函数、输出生日祝词与蛋糕形状函数均为同名重载函数,例如分别采用函数名为 init() 、 volume() 、 area() 、 output() 。

程序运行参考图如下:(红颜色的功能下一章实验完成)1.源程序代码:验结果:五、第五题:(必做题)定义一个一元二次方程类,通过继承方式定义一元三次方程类,再继承定义一元四次方程类。

类中至少包含构造函数、求根函数、运算符 + 重载函数、运算符 - 重载函数、运算符==重载函数、输出方程的函数等6 个函数,并编写主函数测试各成员函数。

提示:①两个一元三次方程对应相加仍然是一个一元三次方程;②求根方法采用迭代方法,迭代公式为:Xn+1=Xn -F(Xn)/F ’ (Xn) ,结束迭代的条件|F(Xn+1)|<10-7 与|Xn+1-Xn|<10-7 同时成立;③一元三次方程的一般形式如下:F(X)=AX3+BX2+CX+D=0 。

输出方程格式为: A*X^3+B*X^2+C*X+D=0 ;④两个一元三次方程对应相加和对应相减仍然是一元三次方程。

⑤假定类中的方程系数能求解出实根。

不考虑方程存在虚根和无根的情况。

求根函数应该有一个参数,该参数指明迭代初值。

例如方程 2X3-4X2+3x-6 = 0 在附近的根。

又例如方程X3+12X2+48X+64=0 在附近的根。

例如方程X4-10X3+35X2-50x+24=0在附近的根。

又例如方程X4+12X3+54X2+108X+81=0在附近的根。

因此类中数据成员除了系数外,还应考虑迭代初值作为数据成员。

1.源程序代码:#include<iostream>#include<cmath>using namespace std;class Equation2{protected:double A,B,C;double X0;public:Equation2(double a=1,double b=1,double c=1,double x0={Set(a,b,c,x0);}void Set(double a,double b,double c,double x0){A=a;B=b;C=c;X0=x0;}double root(){double X=X0;double temp;do{temp=X;X=X-((A*X*X+B*X+C)/(2*A*X+B));}while(fabs(X)>=10e-7||fabs(temp-X)>=10e-7);return X;}Equation2 operator +(Equation2 eq2){A=A+;B=B+;C=C+;return *this;}Equation2 operator -(Equation2 eq2){A=;B=;C=;return *this;}Equation2 operator ==(Equation2 eq2){if(A/==B/&&B/==C/cout<<"YES!";elsecout<<"NO!";return *this;}void Print(){cout<<A<<"X^2+"<<B<<"X+"<<C<<"=0";}};class Equation3:public Equation2{protected:double D;public:Equation3(double a=1,double b=1,double c=1,double d=1,double x0= {Set(a,b,c,d,x0);}void Set(double a,double b,double c,double d,double x0){Equation2::Set(a,b,c,x0);D=d;}double root(){double X=X0;double temp;do{temp=X;X=X-((A*X*X*X+B*X*X+C*X+D)/(3*A*X*X+2*B*X+C));}while(fabs(X)>=10e-7||fabs(temp-X)>=10e-7);return X;Equation3 operator +(Equation3 eq3){A=A+;B=B+;C=C+;D=D+;return *this;}Equation3 operator -(Equation3 eq3){A=;B=;C=;D=;return *this;}Equation3 operator ==(Equation3 eq3){if(A/==B/&&B/==C/&&C/==D/cout<<"YES!";elsecout<<"NO!";return *this;}void Print(){cout<<A<<"X^3+"<<B<<"X^2+"<<C<<"X+"<<D<<"=0";}};class Equation4:public Equation3{protected:double E;public:Equation4(double a=1,double b=1,double c=1,double d=1,doublee=1,double x0={Set(a,b,c,d,e,x0);}void Set(double a,double b,double c,double d,double e,double x0) {Equation3::Set(a,b,c,d,x0);E=e;double root(){double X=X0;double temp;do{temp=X;X=X-((A*X*X*X*X+B*X*X*X+C*X*X+D*X+E)/(4*A*X*X*X+3*B*X*X+2*C*X+D)) ;}while(fabs(X)>=10e-7||fabs(temp-X)>=10e-7);return X;}Equation4 operator +(Equation4 eq4){A=A+;B=B+;C=C+;D=D+;E=E+;return *this;}Equation4 operator -(Equation4 eq4){A=;B=;C=;D=;E=;return *this;}Equation4 operator ==(Equation4 eq4){if(A/==B/&&B/==C/&&C/==D/&&D/==E/cout<<"YES!";elsecout<<"NO!";return *this;}void Print(){cout<<A<<"X^4+"<<B<<"X^3+"<<C<<"X^2+"<<D<<"X+"<<E<<"=0";}};int main(){Equation2 equation2(2,3,4,,equation21;Equation3 equation3(2,3,4,5,,equation31;Equation4 equation4(2,3,4,5,6,,equation41;cout<<"方程为:\n";();cout<<endl;();cout<<endl;();cout<<endl;cout<<"测试根:\n二次:";cout<<();cout<<"\n三次:";cout<<();cout<<"\n四次:";cout<<();cout<<"测试加法:\n二次:";equation2+equation21;();cout<<"\n三次:";equation3+equation31;();cout<<"\n四次:";equation4+equation41;();cout<<"\n测试减法:\n二次:";equation2-equation21;();cout<<"\n三次:";equation3-equation31;();cout<<"\n四次:";equation4-equation41;();return 0;}2.实验结果:六、第六题:给自定义虚数类增加运算符*、/、++、--、==重载,注意++和--分前置和后置两种情况,编写主函数加以测试。

相关主题