1、西安交大C+程序设计第十章作业西安交通大学实验报告课程_计算机程序设计_实验名称_多态性_第 1 页 共 44 页系 别_ _ 实 验 日 期 2014 年 5 月 31 日专业班级_ _组别_ 实 验 报 告 日 期 2014 年 5 月 31 日姓 名_ _学号_ _ 报 告 退 发 ( 订正 、 重做 )同 组 人_ 教 师 审 批 签 字 一、实验目的理解掌握多态的使用方法,学会用虚函数。二、实验内容 (一)第一题:定义一个类Base,该类含有虚函数display,然后定义它的两个派生类FirstB和SecondB,这两个派生类均含有公有成员函数display,在主程序中,定义指向基类
2、Base的指针变量ptr,并分别定义Base、FirstB、Second的对象b1、f1、s1,让ptr分别指向b1、f1、s1的起始地址,然后指向执行这些对象的成员函数display。1.源程序代码:#includeusing namespace std;class Base public: virtual void display() coutsound!sound!sound!; ;class FirstB:public Basepublic: void virtual display() coutmiao!miao!miao!; ;class SecondB:public Basepu
3、blic: void virtual display() coutwang!wang!wang!; ;int main() Base *ptr; Base b1; FirstB f1; SecondB s1; coutdisplay(); coutdisplay(); coutdisplay(); coutendl; return 0; 2.实验结果:(二)第二题: 扩充例10-5,从中派生一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。1.源程序代码: 验结果: (三)第三题: 扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。从键盘
4、输入你的生日,如果今天是你的生日则显示:“Harry Birthday!”否则显示“还有*天是你的生日”或者“你的生日已经过去了* 天,距离明年生日还有*天”。1.源程序代码: endl; coutab; Date birthday(a,b); (birthday); cout 重载函数、输出生日祝词与蛋糕形状函数。并编写主函数测试各成员函数。继承方式如下:首先定义圆柱体形状蛋糕类,只有 3 个数据成员,半径、高、生日祝词。然后派生出圆柱体 _ 方柱体蛋糕类,即在圆柱体形状上增加方柱体形状。假定方柱体的正方形面积小于圆柱体的圆形面积,注意方柱体的高与正方形的边长不一定相等。再用圆柱体 _ 方柱
5、体蛋糕类派生出圆柱体 _ 方柱体 _ 菱形体蛋糕类,即在方柱体形状上增加菱形柱体形状。假定菱形柱体的菱形面积小于方柱体的正方形面积。提示: ?运算符 重载指两个蛋糕对象的体积大小。?基类和派生类数据成员不能定义为 public 。 设置数据成员函数、求蛋糕体积、求蛋糕表面积函数、输出生日祝词与蛋糕形状函数均为同名重载函数,例如分别采用函数名为 init() 、 volume() 、 area() 、 output() 。程序运行参考图如下:(红颜色的功能下一章实验完成)1.源程序代码:验结果:五、第五题:(必做题) 定义一个一元二次方程类,通过继承方式定义一元三次方程类,再继承定义一元四次方程
6、类。类中至少包含构造函数、求根函数、运算符 + 重载函数、运算符 - 重载函数、运算符=重载函数、输出方程的函数等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*X3+B*X2+C*X+D=0 ;两个一元三次方程对应相加和对应相减仍然是一元三次方程。假定类中的方程系数能求解出实根。不考虑
7、方程存在虚根和无根的情况。求根函数应该有一个参数,该参数指明迭代初值。例如方程 2X3-4X2+3x-6 0 在 附近的根。又例如方程 X3+12X2+48X+64=0 在 附近的根。例如方程X4-10X3+35X2-50x+240在附近的根。又例如方程X4+12X3+54X2+108X+81=0在附近的根。因此类中数据成员除了系数外,还应考虑迭代初值作为数据成员。 1.源程序代码:#include#includeusing namespace std;class Equation2protected: double A,B,C; double X0;public: Equation2(dou
8、ble 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=
9、B+; C=C+; return *this; Equation2 operator -(Equation2 eq2) A=; B=; C=; return *this; Equation2 operator =(Equation2 eq2) if(A/=B/&B/=C/ coutYES!; else coutNO!; return *this; void Print() coutAX2+BX+C=10e-7|fabs(temp-X)=10e-7); return X; Equation3 operator +(Equation3 eq3) A=A+; B=B+; C=C+; D=D+; re
10、turn *this; Equation3 operator -(Equation3 eq3) A=; B=; C=; D=; return *this; Equation3 operator =(Equation3 eq3) if(A/=B/&B/=C/&C/=D/ coutYES!; else coutNO!; return *this; void Print() coutAX3+BX2+CX+D=10e-7|fabs(temp-X)=10e-7); return X; Equation4 operator +(Equation4 eq4) A=A+; B=B+; C=C+; D=D+;
11、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/ coutYES!; else coutNO!; return *this; void Print() coutAX4+BX3+CX2+DX+E=0; ;int main() Equation2 equation2(2,3,4,equation21; Equation3 equation3(2,
12、3,4,5,equation31; Equation4 equation4(2,3,4,5,6,equation41; cout方程为:n; (); coutendl; (); coutendl; (); coutendl; cout测试根:n二次:; cout(); coutn三次:; cout(); coutn四次:; cout(); cout测试加法:n二次:; equation2+equation21; (); coutn三次:; equation3+equation31; (); coutn四次:; equation4+equation41; (); coutn测试减法:n二次:;
13、equation2-equation21; (); coutn三次:; equation3-equation31; (); coutn四次:; equation4-equation41; (); return 0;2.实验结果:六、第六题:给自定义虚数类增加运算符*、/、+、-、=重载,注意+和-分前置和后置两种情况,编写主函数加以测试。1.源程序代码:验结果:3.问题分析:(七)第七题:完善上一章定义大整数类的题目,成员函数包括加、减以及判大小,注意用运算符重载,编写主函数加以测试。1.源程序代码:#include#include#include #include using namespa
14、ce std;class czs int num100; int len; char sign;public: czs() for(int i=0;i100;i+) numi=0; len=0; sign= ; void set(char *str) if(str0=-) str+; sign=-; else if(str0=+) str+; sign= ; len=strlen(str); for(int i=100-len;i100;i+) numi=stri+len-100-0; void print() cout=100) cout0; for(;i100;i+) coutnumi;
15、cout100-b;i-) numi=numi+i; numi-1=numi-1+numi/10; numi=numi%10; num100-b=num100-b+100-b; else if(len for(int i=99;i=len;i-) numi=numii; if(numi0) numi=numi+10; numi-1-; else if(len=len;i-) numi=i-numi; if(numi0) numi=numi+10; i-1-; else int b=0; for(int i=100-len;i100;i+) if(numi!=i) if(numi=len;i-)
16、 numi=i-numi; if(numi=len;i-) numi=numii; if(numi100-b;i-) numi=numi+i; numi-1=numi-1+numi/10; numi=numi%10; num100-b=num100-b+100-b; else if(len for(int i=99;i=len;i-) numi=numii; if(numi0) numi=numi+10; numi-1-; else if(len=len;i-) numi=i-numi; if(numi0) numi=numi+10; i-1-; else int b=0; for(int i
17、=100-len;i100;i+) if(numi!=i) if(numi=len;i-) numi=i-numi; if(numi=len;i-) numi=numii; if(numi(czs &a) czs:operator -(a); if(sign=-) cout; else int i=100-len; while(numi=0&i100) i+; if(i=100) cout=; else cout; return *this; ;void main() char a100,c100,b100; czs d,e,f; cout请输入三个数:abc; (a); (b); (c); cout前两个数的和为:endl; d+e; (); cout前两个数的和减去第三个数为:endl; d-f; (); coutf; cout第三个数; coutendl;2.实验结果:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1