C++上机实验报告6
更新时间:2023-11-14 12:02:01 阅读量: 教育文库 文档下载
C++实验报告
实验六 多态性 实验目的
1.掌握运算符重载的方法
2.学习使用虚函数实现动态多态性 实验要求
1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。
3. (选做)对实验4中的People类重载“==”运算符和“-”运算符,“==”运算符判断两个people类对象的id属性是否相等;“-”运算符实现People类对象的赋值操作。 实验内容及实验步骤
1编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。 源代码:
#include
class Point {
private: double _x,_y; public: Point(){_x=0;_y=0;} Point(double x,double y){_x=x;_y=y;} Point& operator++(); Point operator++(int); Point& operator--(); Point operator--(int); void show(); };
void Point::show() { cout<<\}
Point& Point::operator ++() { _x=_x+1; _y=_y+1; return *this; }
Point Point::operator++(int) { Point old=*this; ++(*this); return old; }
Point& Point::operator --() { _x=_x-1; _y=_y-1; return *this; }
Point Point::operator--(int) { Point old=*this; --(*this); return old; }
int main() {
Point a(2,3); (a++).show(); (++a).show(); a.show(); (a--).show(); (--a).show(); a.show(); return 0; }
运行结果:
2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。 源代码:
#include
class vehiele {
public: virtual void Run() { cout<<\ } virtual void Stop() { cout<<\ } };
class bicycle:virtual public vehiele {
public:
virtual void Run()
{ cout<<\ } virtual void Stop() { cout<<\ } };
class motorcar:virtual public vehiele {
public: virtual void Run() { cout<<\ } virtual void Stop() { cout<<\ } };
class motorcycle:public bicycle,public motorcar {
public: virtual void Run() { cout<<\ } virtual void Stop() { cout<<\ } };
void show(vehiele*ptr) { ptr->Run(); ptr->Stop(); }
int main() { vehiele a;
}
bicycle b; motorcar c; motorcycle d; show(&a); show(&b); show(&c); show(&d); return 0;
运行结果:
思考题
1. 如何将一个运算符重载为类的成员函数?
当运算符重载为类的成员函数时,函数的参数个数比原来的操作数要少一个(后置单目运算符除外),这是因为成员函数用this指针隐式地访问了类的一个对象,它充当了运算符函数最左边的操作数。因此:
(1) 双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。
(2) 前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。
2. 如何将一个运算符重载为类的友元函数?
当运算符重载为类的友元函数时,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应
3. 如何实现运行时刻的多态?
C++使用vtable(虚成员函数表)来实现虚成员函数的运行期绑定。虚成员函数表存在的用途是支持运行时查询,使得系统可以将某一函数名绑定到虚成员函数表中的特定入口地址。需成员函数表的实现是与系统无关的。 使用动态绑定的程序会影响效率,因为虚成员函数表需要额外的存储空间,而且对虚成员函数表进行查询也需要额外的时间。
纯面向对象语言由于所有的函数都以动态方式运行,因而效率的降低会相当大,而在C++中,程序员可以选择性的执行哪些函数是虚成员函数,因而既不会导致太大的效率降低,又充分利用了运行期绑定机制
2. 如何将一个运算符重载为类的友元函数?
当运算符重载为类的友元函数时,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应
3. 如何实现运行时刻的多态?
C++使用vtable(虚成员函数表)来实现虚成员函数的运行期绑定。虚成员函数表存在的用途是支持运行时查询,使得系统可以将某一函数名绑定到虚成员函数表中的特定入口地址。需成员函数表的实现是与系统无关的。 使用动态绑定的程序会影响效率,因为虚成员函数表需要额外的存储空间,而且对虚成员函数表进行查询也需要额外的时间。
纯面向对象语言由于所有的函数都以动态方式运行,因而效率的降低会相当大,而在C++中,程序员可以选择性的执行哪些函数是虚成员函数,因而既不会导致太大的效率降低,又充分利用了运行期绑定机制
正在阅读:
C++上机实验报告611-14
邹城40米钢混凝土叠合梁混凝土施工方案109-15
社团宣传月策划10-25
隔河头初级中学中长期发展规划10-01
基本气象要素09-19
木地板施工合同文档04-28
天津海关各部门职能及电话10-28
2017年重庆市一本二本大学排名02-21
某双层扁平椭球网壳的静力分析和强震作用下的动力分析 - 图文07-11
微课程学习笔记(1630终版) - 图文03-14
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 上机
- 实验
- 报告
- 2011年第一季度食品类产品生产许可例会会议纪要
- 诗歌朗诵会串词
- webservice配置
- (2018)最新部编人教版小学三年级数学应用题500题
- 关于-MODBUS-各地址的说明
- 随机变量独立性的判断方法探究
- 四年级英语下册 Module 5 Unit 2 They were young一课一练2 外研版(三起)
- 新版高中数学人教A版必修3习题:第二章统计 2.1.1
- 第一分卷投标文件技术规范书1
- 河北经贸大学2012《国际经济学 - 大题》期末必备
- 工程师职业道德课程感悟
- 《名利场》女主角贝基的性格分析
- 2016年“岗位大练兵、业务大比武”模拟试卷九(征管评估类)
- 工作分析(习题)
- 江苏省扬州、泰州、淮安、南通、徐州、宿迁、连云港市2018届高三第三次调研测试生物试题
- 微机原理与汇编语言程序设计课后习题参考答案
- 微经复习资料
- abaqus UAMP用户子程序
- 测量平差复习题
- 2017年地震科普知识竞赛试题及答案