试验6 多态和虚函数、运算符重载
更新时间:2023-10-14 15:04:01 阅读量: 综合文库 文档下载
- 试验6号03星推荐度:
- 相关推荐
试验内容
(1)程序Ex_Shape:定义一个抽象类Cshape,包含纯虚数函数Area(用于计算面积)和SetData(用于重设形状大小),然后派生出三角形Ctriangle类,矩形Crect类、园Ccircle类,分别求其面积。最后定义一个Carea类,计算这几个形状的面积之和,各形状的数据通过Carea类构造函数或成员函数来设置,编写一个完整的程序。
(2)程序Ex_Complex;定义一个复数类Ccomplex,通过重载运算符“*”和“/”,直接实现两个复数之间的乘除运算。运算符“*”用成员函数实现重载,而运算符“/”用友元函数实现重载。编写一个完整的程序(包括测试运算符的程序部分)。
提示:两复数相乘的计算公式为:(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。
实验准备和说明
(1)在学习完第2章的“运算符重载”内容之后进行本次实验。 (2)编写本次上机所需要的程序。
实验步骤
1.创建工作文件夹
打开计算机,在“D:\\Visual C++程序\\ LiMing”文件夹中创建一个新的子文件夹”实验6“。
2.输入并运算程序Ex_Shape.cpp
输入并运算程序Ex_Shape.cpp的具体步骤如下。 (1)启动VisualC++6.0.
(2)单击标准工具栏上的“”按钮,在新打开的文档窗口中输入下列程序代码: #include
virtual float Area()=0; //将Area定义成纯虚函数 virtual void SetData(float f1, float f2)=0; //将SetData定义成纯虚函数 };
class Ctriangle:public Cshape { public:
Ctriangle(float h=0, float w=0)
{H=h; W=w; }
float Area() //在派生类定义纯虚函数的具体实现代码 { return(float)(H*W*0.5); }
void SetData(float f1, float f2) { H=f1; W=f2; } private:
floatH,W; };
Class Crect :publicCShape { public:
Crect(float h=0, float w=0)
{ H=h; W=w; }
float Area() //在派生类定义纯虚函数的具体实现代码 { return(float)(H*W); }
void SetData(float f1, float f2) { H=f1; W=f2; } private: float H,W; };
Class Ccircle: public Cshape { public:
Ccircle(float r=0) { R=r;}
float Area() //在派生类定义纯虚函数的具体实现代码 { return(float)(3.14159265*R*R); }
void SetData(float r, float) //保持与纯虚函数一致 { R=r;} private: float R; };
class CArea { public:
CArea(float triWidth,float triHeight,float rcHeidht,float r) {
ppShape=new Cshape*[3];
ppShape[0]= new CTriangle(triWidth,triHeight); ppShape[1]= new CRect(Crect(rcWidth,rcHeight); ppShape[2]= new CCircle(r); } ~CArea() {
for(inti=0;i<3;i++) delete ppShape[i]; delete []ppShape; }
void SetShapeData(int n,float f1,floatf2=0)
∥n为0表示操作的是三角形,1表示矩形,2表示圆形 {
if((n>2)‖(n<0)return; ppShape[n]->SetData(f1,f2); }
void.CalAndPrint(void) ∥计算并输出 {
float fSnm=0.0;
char*str[3]= {“三角”,“矩”,“圆” }; for(int i=0;i<3;i++) {
float area= ppShape[i]->Area();∥通过基类指针,求不同形状的面积 cout<
count<<“总面积是”< Cshape**ppShape; ∥指向基类的指针数组 } void main() { Carea a(10,20,6,8,6.5); a.CalAndprint(); a.A.setshapedata(0,20,30); a.CalAndprint(); a.SetShapeData(2,11); a.CalAndprint(); a.setShapeData(1,2,5): a.CalAndprint(); } (3) 单击标准工具栏的Save按钮,弹出“保存为”文件对话框,将文件定位到“D\\VisualC++程序\\LiMing\\实验6”,文件名为Ex_shape.cpp。 (4)编译运行,分析结果。 试一试在上述程序的基础上,若还有一个正方形Csquare,则这样的类应如何实现?整个程 序应如何修改? 3.输入并运行程序Ex_Complex.cpp 输入并运行程序Ex_Complex.cpp的具体步骤如下。 (1)选择“文件”→“关闭工作区”,关闭原来项目。 (2)单击标准工具栏上的“New Text File”按钮,在新打开的文档窗口中述如下列程序代码: #include Ccomplex(double r=0,double i=0) { realpart=r; imagepart=i; } Void print() { cout<<"该复数实数="< Friend CComplex operator/(CComplex &a,CComplex &b); // 友元函数重载运算符/private: double realpart; //复数的实部 double imagepart; //复数的虚部 }; CComplex CComplex::operator *(CComplex &b) { CComplex temp; temp.realPart=real.Part*b.realPart-imagePart*b.imagePart; temp.imagePart=realPart*b.imagePart+imagePart*b.realPart; return temp; } CComplex operator/(CComplex &a,CComplex &b) { CComplex temp; double d=b.realPart*b.realPart+b.imagePart*b.imagePart; temp.realPart=(a.realPart*b.realPart+a.imagePart*b.imagePart)/d; temp.imagePart=(a.imagePart*b.realPart-a.realPart*b.imagePart)/d; return temp; } void main() { CComplex c1(12,20),c2(50,70),c; c=c1.c2; c.print(); c=c1/c2; c.print(); } (3)单击标准工具栏的save按钮,弹出“保存为”文件对话框,将文件保存为Ex_Complex.cpp。 (4)编译运行,分析结果。 试一试 在上述程序的基础上,若还有复数和实数的乘除运算,则如何进行重载? 4.退出Visual C++ 6.0 5.写出实验报告 结合上述分析和试一试内容,写出实验报告。 思考与练习 (1)在程序Ex_Shape中,若基类CShape中没有纯虚函数SetData(),则编译肯定会有错误,这是为什么? (2)用友元函数和成员函数进行运算符重载的区别是什么?
正在阅读:
试验6 多态和虚函数、运算符重载10-14
做葫芦作文450字06-30
8标段焊工考试方案09-20
母婴护理培训课堂笔记05-10
学溜冰作文300字07-05
春天的玉河作文400字07-05
瓦楞纸箱制造工艺及质量控制07-28
勐撒农场管理委员会2016部门决算01-14
2016继续教育题库01-17
学雷锋主题教育讲话稿01-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 多态
- 运算符
- 重载
- 函数
- 试验
- 湖大有机化学课后习题及答案 精品
- 2012南京林业大学植物学考研真题
- 山东省宁津县保店中学八年级英语上册《Unit 1 How long have you studied English》学案 外研版 精品
- 小学五年级数学期中阶段性测试卷 2015年11月
- 浅谈入世之后,中国企业国际化现状及对策
- 我国内地高校实施通识教育的现状分析与思考 doc
- 中国路用涂料市场态势调研及未来五年发展商机研究报告
- 执法资格考试试题
- 金融经济学主要学派及内容综述
- 2016年一级建造师水利水电真题及答案
- 地理教学论
- 水质常规指标测定操作方法
- 2018年最新6月思想汇报:坚持心中的信念
- 微生物学实验教案(10级)
- 神经外科手册--5脑死亡
- 西王庄乡仙坛山生态农业治理实施方案
- 2018年浙江省中考数学《第4讲:分式及其运算》总复习讲解
- 第7章《运动和力》单元综合测试题 新人教版
- 《妇产科学》第二章 妊娠生理选择题
- 季氏将伐颛臾 有答案