青岛理工大学C++第三次上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程实验报告
课程名称C++面向对象程序设计班级实验日期姓名学号实验成绩实验名称实验一类和对象
实验目的及要求《运算符重载》
1、理解运算符重载的重要性及好处
2、理解那些运算符可以重载而那些不能重载
3、理解单目运算符和双目运算符重载时特点
4、熟练掌握一般运算符重载的方法
5、掌握特殊运算符重载的方法
《多态与虚函数》
1、理解静态联编和动态联编,理解多态的概念
2、理解虚函数在类的继承层次中的作用及虚函数的引入对程序运行时的影
响,能够对使用虚函数的简单程序写出运行结果
3、了解虚函数对多态性的支持
4、掌握虚函数和纯虚函数的概念
5、理解静态多态性和动态多态性,学习使用虚函数的继承实现动态多态性
6、了解抽象类的概念
实验环境VC++6.0
实验内容1、编写一个时间类time,包含时、分、秒等数据成员,实现时间的加、减、
输入和输出操作。其中加减通过重载运算符来实现
2、设计一个三角形类triangle,包含三角形三条边长的私有数据成员,另有一
个重载运算符‘+’,以实现两个三角形的面积之和。
分析提示:在triangle类中设计一个友元函数operator+(triangle t1,trianglet2),它重载运算符‘+’,返回t1和t2两个三角形的面积之和
3、分析程序错误,分析原因并改正
4、下面的shape类是一个表示形状的抽象类,area()为求图形面积的函数。请从shape类派生三角形类(triangle)和圆类(circle),并给出具体的求面积函数
算法描述及实验步骤1)time
Time类
-hour:int;-mintue:int;-secon
d:int;
+ get();
+ disp();
+operator+();
+operator-();
2)求两个三角形的面积之和
3) 4)
triangle类
-p:double
-sp:double
-a:int
-b:int
-c:int
+triangle(int a,int b,int c)
+void disp()
+friend double
operator+(triangle
t1,triangle t2)
A类
-x:int
+virtual int disp()
+show(A&p)
+A(int i)
B类
-y:int
+virtual int disp()
+B(int i.int j)
Shape类
+virtual float area()
triangle类
-a:int
-b:int
-c:int
-s:float
-p:float
+triangle()
+virtual float area()
circle类
-r:float
+circle(float r)
+virtual float area()
调试过程及实验结果
总结这一次实验中,运算符重载的这一部分,对于如何去实现输入时间、输入三角形的三边长,我遇到了一些困难,一开始的时候我只是在主函数中初始化了triangle的对象,使它们调用求面积函数,而不是通过在运行窗口中直接输入求得,后来我通过查看课本上的实例,通过get()函数来获取。在编写time类时,一开始由于编写的重载运算符的友元函数operator+()中的算法错误,使得输出的两时间的和不对,经过修改后得出了正确的结果
在多态与虚函数这一部分,通过使用纯虚函数,了解了纯虚函数的使用方法,以及抽象类的定义
附录1、
#include
class time
{
public:
time(int h,int m,int s){hour=h;mintue=m;second=s;}
void get()
{
cout<<"请输入时间:";
cin>>hour>>mintue>>second;
if(hour>=0&&hour<24&&mintue>=0&&mintue<0&&second>=0&&second<60) {
cout< } else cout<<"时间格式不正确!"< void disp() { cout< friend time operator +(time t1,time t2) { time t(0,0,0); t.second=t1.second+t2.second; if(t.second>=60) { t.second-=60; t.mintue++; } t.mintue=t1.mintue+t2.mintue; if(t.mintue>=60) { t.mintue-=60; t.hour++; } t.hour=t1.hour+t2.hour; t.hour=t.hour%24; return t; } friend time operator -(time t1,time t2) { time t(0,0,0); if(t1.second { t.second=t2.second-t1.second; } else t.second=t1.second-t2.second; if(t1.mintue { t.mintue=t2.mintue-t1.mintue; } else t.mintue=t1.mintue-t2.mintue; if(t1.hour { t.hour=t2.hour-t1.hour; } else