实验三多态与虚函数及运算符重载.docx
- 文档编号:11769050
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:15
- 大小:284.62KB
实验三多态与虚函数及运算符重载.docx
《实验三多态与虚函数及运算符重载.docx》由会员分享,可在线阅读,更多相关《实验三多态与虚函数及运算符重载.docx(15页珍藏版)》请在冰点文库上搜索。
实验三多态与虚函数及运算符重载
C++面向对象程序设计课程实验报告
课程名称
C++面向对象程序设计
班级
实验日期
2014.4.25
姓名
学号
实验成绩
实验名称
实验三多态与虚函数及运算符重载
实
验
目
的
及
要
求
1.理解运算符重载的重要性及好处。
2.理解哪些运算符可以重载而哪些不能重载。
3.理解单目运算符和双目运算符重载时参数的特点。
4.掌握一般运算符及特殊运算符重载的方法。
5.理解多态及虚函数的概念。
6.理解虚函数在类的继承层次中的作用及引入虚函数对程序运行时的影响。
7.了解虚函数对多态性的支持及抽象类的概念。
实
验
环
境
硬件平台:
普通PC机
软件平台:
Windows操作系统
编程环境:
VisualC++6.0或Dev-cpp
实
验
内
容
1.编写一个时间类Time,包含时、分、秒等数据成员,实现时间的加、减、输入和输出操作。
其中加减通过重载相应运算符来实现。
2.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,返回t1和t2两个三角形的面积之和。
3.分析一下程序错误,分析原因并改正。
4.下面的shape类是一个表示形状的抽象类,area()为求图形面积的函数。
请从shape类派生三角形类(Triangle)和圆类(circle),并给出具体的求面积函数。
#include
usingnamespacestd;
classshape
{
public:
virtualfloatarea()=0;
}
算
法
描
述
及
实
验
步
骤
各题目算法描述及实验步骤:
题目1主要考察运算符的重载、构造函数的调用和类的对象的使用。
算法描述及实验步骤:
首先在Time类定义私有成员时分秒和公有成员函数,其中包括运算符的重载,其返回值为Time型;然后依次编写重载函数,需要根据时间加减是时、分、秒的进位算法,同时调用构造函数使得到的新数据可以直接返回;最后在主函数中编写界面和选项,在不同的选项中调用不同的函数,并使用显示函数输出结果。
Time类:
classTime
{
private:
inthour,minute,second;
public:
Time(){}//缺省构造函数
Time(intshi,intfen,intmiao)//构造函数
{
hour=shi;
minute=fen;
second=miao;
}
Timeoperator+(TimeA);//运算符重载
Timeoperator-(TimeA);
voidshowtime();
}
题目2主要考察友元函数的使用以及类的对象的定义。
算法描述及实验步骤:
首先定义一个类,共有成员除了缺省构造函数,还包括一个求面积的函数和友元函数,友元函数用来返回面积之和;然后在主函数中定义类的对象,并给参数赋值,调用友元函数输出area。
主函数为:
intmain()
{
TriangleA(4.0,4.0,5.0),B(6.0,8.0,10.0);
cout<<"Theareais:
"<<(A+B)< getch(); return0; } 题目3主要考察派生类基类成员函数的访问。 算法描述及实验步骤: 此题中基类指针指向派生类对象只能访问基类的成员函数。 题目4主要考察使用虚函数,用基类的指针或基类的引用,可以动态调用派生类内同名area()的函数,以及以共有继承方式定义的派生类的编写。 算法描述及实验步骤: 首先定义shape类,公有成员函数为虚函数;然后分别编写三角形派生类和圆形派生类,派生类内分别包括三角形和圆形面积的算法;最后在主函数中定义一个shape型的指针变量,用来指向派生类的对象,同时使用显示函数输出面积。 主函数为: intmain() { shape*p; triangleB(4,3,6);//定义三角形类的对象 circleC(2.0);//定义圆形类的对象 p=&B; show(p); p=&C; show(p); return0; } 调 试 过 程 及 实 验 结 果 将四段代码分别在VisualC++6.0中进行程序调试,更改代码错误后编译通过,并输出调试后的最终结果。 输出结果如下: 题目1: 题目2: 题目3: 题目4: 总 结 实验三主要考察了虚函数和运算符重载成员函数,应着重理解虚函数在什么情况下使用。 通过实验三的再学习现作如下总结: 题目1应注意重载函数的返回值为Time型,这样可以用时分秒的形式返回数据。 题目2的重点是重载运算符“+”,用来求两个三角形对象的面积之和,利用友元函数重载运算符“+”并返回面积之和。 题目3的重点是派生类基类成员函数的访问,此题中基类指针指向派生类对象只能访问基类的成员函数,派生类等的共有成员函数和私有数据成员的访问一直是易错点,应特别注意。 题目4的重点是虚函数用基类的指针或基类的引用,可以动态调用派生类内同名的函数,方便简洁并且提高效率。 这一部分题目较为复杂,除了需要算法分析,还要仔细编写,确保思路清晰,同时灵活使用友元函数、虚函数、类的对象,尽可能使程序简化。 附 录 实验三各题目程序代码如下: 题目1: #include #include usingnamespacestd; classTime { private: inthour,minute,second; public: Time(){}//缺省构造函数 Time(intshi,intfen,intmiao)//构造函数 { hour=shi; minute=fen; second=miao; } Timeoperator+(TimeA);//运算符重载 Timeoperator-(TimeA); voidshowtime(); }; voidTime: : showtime() { cout< "< "< } TimeTime: : operator+(TimeA) { second=A.second+second; if(second>=60) { minute++; } second=second%60; minute=A.minute+minute; if(minute>=60) { hour++; } minute=minute%60; hour=(A.hour+hour)%24; returnTime(hour,minute,second);//调用构造函数,得到的新时间直接返回 } TimeTime: : operator-(TimeB) { if(second { minute--; } second=(second-B.second)%60; if(minute { hour--; } minute=(minute-B.minute)%60; hour=(hour-B.hour)%24; returnTime(hour,minute,second); } intmain() { inthour,minute,second; TimeA,B;//定义两个Time类的对象 charch; while (1) { system("cls"); cout<<"a.inputtime"< cout<<"b.addtime"< cout<<"c.subtime"< cout<<"pleaseinputyourchoice"< cin>>ch; if(ch=='a') { cout<<"pleaseinputtime"< cin>>hour>>minute>>second; A=Time(hour,minute,second); A.showtime(); getch(); } elseif(ch=='b') { cout<<"pleaseinputaddtime"< cin>>hour>>minute>>second; B=Time(hour,minute,second); A=A+B; A.showtime(); getch(); } elseif(ch=='c') { cout<<"pleaseinputsubtime"< cin>>hour>>minute>>second; B=Time(hour,minute,second); A=A-B; A.showtime(); getch(); } else { exit(0); } } return0; } 题目2: #include #include classTriangle { public: Triangle(intnew_a,intnew_b,intnew_c); virtualdoublearea(); voiddisplay(); frienddoubleoperator+(Trianglet1,Trianglet2);//运算符“+”重载友元函数 private: inta,b,c; doubles; }; Triangle: : Triangle(intnew_a,intnew_b,intnew_c) { a=new_a; b=new_b; c=new_c; } doubleTriangle: : area()//计算三角形面积 { doublep; p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c)); return0; } voidTriangle: : display() { cout<<"三角形的三条边为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验三 多态与虚函数及运算符重载 实验 函数 运算 重载