西安交大C++程序设计第十章作业.docx
- 文档编号:26887454
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:30
- 大小:465.36KB
西安交大C++程序设计第十章作业.docx
《西安交大C++程序设计第十章作业.docx》由会员分享,可在线阅读,更多相关《西安交大C++程序设计第十章作业.docx(30页珍藏版)》请在冰豆网上搜索。
西安交大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
usingnamespacestd;
classBase
{
public:
virtualvoiddisplay()
{
cout<<"sound!
sound!
sound!
";
}
};
classFirstB:
publicBase
{
public:
voidvirtualdisplay()
{
cout<<"miao!
miao!
miao!
";
}
};
classSecondB:
publicBase
{
public:
voidvirtualdisplay()
{
cout<<"wang!
wang!
wang!
";
}
};
intmain()
{
Base*ptr;
Baseb1;
FirstBf1;
SecondBs1;
cout<<"指向基类Base:
\t";
ptr=&b1;
ptr->display();
cout<<"\n指向派生类FirstBase:
\t";
ptr=&f1;
ptr->display();
cout<<"\n指向派生类SecondB:
\t";
ptr=&s1;
ptr->display();
cout< return0; } 2.实验结果: (二)第二题: 扩充例10-5,从中派生一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。 1.源程序代码: 验结果: (三)第三题: 扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。 从键盘输入你的生日,如果今天是你的生日则显示: “HarryBirthday! ”否则显示“还有**天是你的生日”或者“你的生日已经过去了**天,距离明年生日还有**天”。 1.源程序代码: < cout<<"Pleaseinputyourbirthday: "; inta,b; cin>>a>>b; Datebirthday(a,b); (birthday); cout< return0; } 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 #include usingnamespacestd; classEquation2 { protected: doubleA,B,C; doubleX0; public: Equation2(doublea=1,doubleb=1,doublec=1,doublex0= { Set(a,b,c,x0); } voidSet(doublea,doubleb,doublec,doublex0) { A=a; B=b; C=c; X0=x0; } doubleroot() { doubleX=X0; doubletemp; 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); returnX; } Equation2operator+(Equation2eq2) { A=A+; B=B+; C=C+; return*this; } Equation2operator-(Equation2eq2) { A=; B=; C=; return*this; } Equation2operator==(Equation2eq2) { if(A/==B/&&B/==C/ cout<<"YES! "; else cout<<"NO! "; return*this; } voidPrint() { cout< } }; classEquation3: publicEquation2 { protected: doubleD; public: Equation3(doublea=1,doubleb=1,doublec=1,doubled=1,doublex0= { Set(a,b,c,d,x0); } voidSet(doublea,doubleb,doublec,doubled,doublex0) { Equation2: : Set(a,b,c,x0); D=d; } doubleroot() { doubleX=X0; doubletemp; 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); returnX; } Equation3operator+(Equation3eq3) { A=A+; B=B+; C=C+; D=D+; return*this; } Equation3operator-(Equation3eq3) { A=; B=; C=; D=; return*this; } Equation3operator==(Equation3eq3) { if(A/==B/&&B/==C/&&C/==D/ cout<<"YES! "; else cout<<"NO! "; return*this; } voidPrint() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 C+ 程序设计 第十 作业