欢迎来到天天文库
浏览记录
ID:38493165
大小:74.00 KB
页数:6页
时间:2019-06-13
《实验四 继承、派生与多态》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、西华大学计算机系学生上机实践报告西华大学计算机系上机实践报告课程名称:面向对象程序设计年级:2008上机实践成绩:指导教师:谭平姓名:谢文波上机实践名称:继承与多态学号:312008080605506上机实践日期:09-11-19上机实践编号:实验四组号:上机实践时间:4学时一、实验目的1.学习定义和使用类的继承关系,定义派生类;2.熟悉不同继承方式下对基类成员的访问控制;3.了解派生类中如何使用基类的成员、基类成员在派生类中的访问控制;4.掌握C++中运算符重载的机制和运算符重载的方式;5.学习使用虚函数实现类的动态多态性;6.用C++预定义的文件I/O流类
2、进行文件输入输出。二、实验内容与设计思想上机实践内容:1.定义一个大学生类Graduate,保护数据成员:姓名,学号,校名,并为它定义带参数的构造函数、拷贝构造函数、析构函数和输出数据成员值的print()公有成员函数,另定义研究生类Postgraduate,它以公有继承方式派生于类Graduate,新增加“研究方向、导师名”两个私有数据成员,并定义带参数的构造函数,拷贝构造函数、析构函数和输出研究生数据的print()公有成员函数,另外,要求学号自动增加,且Graduate和Postgraduate的学号起始值不同。在主函数中定义派生类对象进行测试。(字符串
3、用char*表示)思路:在基类和派生类中各定义一个静态成员count记数,在构造函数中逐加实现学号逐加,但在派生类构造函数中要对基类的记数逐减,防止基类记数的跳跃。2.请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有计算对象面积的函数GetArea()、计算对象周长的函数GetPerim()。在主函数中定义抽象类的对象指针数组实现对不同派生类对象及其成员函数的测试。思路:矩形和圆没有相同的成员、计算公式的函数,在shape中定义纯虚构函数;在矩形和圆的派生类中定义各自的成员和公式函数。3.请完成Complex类的定义,使
4、得下面的主函数能正常运行。intmain(){Complexc1(1,2);cout<<"c1="<5、ator-();cout<<"c2=-c3="<>c4;cout<<"c4="<>”运6、算符重载。三、使用环境操作系统:WindownsXPC++环境:VisualC++6.0四、核心代码及调试过程1.intGraduate::count=20080100;Graduate::Graduate(char*str1,char*str2){name=newchar[strlen(str2)+1];shool=newchar[strlen(str1)+1];strcpy(name,str2);strcpy(shool,str1);number=count++;}Graduate::Graduate(Graduateconst&gra){name=new7、char[strlen(gra.name)+1];shool=newchar[strlen(gra.shool)+1];strcpy(name,gra.name);strcpy(shool,gra.shool);number=count++;}GraduateGraduate::operator=(Graduate&G){if(this==&G)return*this;else{delete[]name;delete[]shool;name=newchar[strlen(G.name)+1];shool=newchar[strlen(G.shool)+1];s8、trcpy(name,G.name);
5、ator-();cout<<"c2=-c3="<>c4;cout<<"c4="<>”运
6、算符重载。三、使用环境操作系统:WindownsXPC++环境:VisualC++6.0四、核心代码及调试过程1.intGraduate::count=20080100;Graduate::Graduate(char*str1,char*str2){name=newchar[strlen(str2)+1];shool=newchar[strlen(str1)+1];strcpy(name,str2);strcpy(shool,str1);number=count++;}Graduate::Graduate(Graduateconst&gra){name=new
7、char[strlen(gra.name)+1];shool=newchar[strlen(gra.shool)+1];strcpy(name,gra.name);strcpy(shool,gra.shool);number=count++;}GraduateGraduate::operator=(Graduate&G){if(this==&G)return*this;else{delete[]name;delete[]shool;name=newchar[strlen(G.name)+1];shool=newchar[strlen(G.shool)+1];s
8、trcpy(name,G.name);
此文档下载收益归作者所有