C++上机实验报告实验六.doc

上传人:一*** 文档编号:2737931 上传时间:2020-05-02 格式:DOC 页数:10 大小:133KB
返回 下载 相关 举报
C++上机实验报告实验六.doc_第1页
第1页 / 共10页
C++上机实验报告实验六.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《C++上机实验报告实验六.doc》由会员分享,可在线阅读,更多相关《C++上机实验报告实验六.doc(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、/ 实验六实验目的1.掌握运算符重载的方法2.学习使用虚函数实现动态多态性实验要求1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“”(自增)、“”(自减)运算符,实现对坐标值的改变。2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。3. (选做)对实验4中的People类重载“”运算符和“”运算符,“”运算符判断两个people类对象的id属性是否相等;“”运算

2、符实现People类对象的赋值操作。实验内容及实验步骤1. 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator+();Point operator+(int);以实现对Point类重载“+”(自增)运算符,定义成员函数Point operator();Point operator(int);以实现对Point类重载“”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1Cpp#include using namespace std;class Pointpublic:Point();Point(int x,int y);Point()

3、 /Point类析构函数Point& operator+(); /公有成员函数Point operator+(int);Point&operator-();Point operator-(int);void Show();private:int _x; /私有数据成员 int _y;Point:Point() /Point类构造函数_x=0;_y=0;Point:Point(int x,int y) /Point类构造函数_x=x;_y=y;Point & Point:operator+() /重载后置+运算符为Point类成员函数_x+;_y+;Point Point:operator+(i

4、nt) /重载前置+运算符为Point类成员函数Point old=*this;+(this-_x);+(this-_y);return old;Point & Point:operator-() /重载后置-运算符为Point类成员函数_x-;_y-;Point Point:operator-(int) /重载前置-运算符为Point类成员函数Point old=*this;-(this-_x);-(this-_y);return old;void Point:Show() /输出Point的坐标值 cout_x,_y)endl;int main()Point a(2,3); /定义一个Po

5、int类对象aPoint b=a+; /定义Point类对象b并用a+初始化bPoint c=+a; /定义Point类对象c并用+a初始化cPoint d=-a; /定义Point类对象d并用-a初始化dPoint e=a-; /定义Point类对象e并用a-初始化ecoutPoint a(;a.Show(); /输出a的坐标coutPoint b(;b.Show(); /输出b的坐标coutPoint c(;c.Show(); /输出c的坐标coutPoint d(; d.Show(); /输出d的坐标coutPoint e(;e.Show(); /输出e的坐标return 0;运行结果:

6、2编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2cpp#include using namespace st

7、d;class vehicle /基类vehiclepublic:vehicle()vehicle()virtual void Run()coutThe vehicle is running!endl; /定义虚函数Run()virtual void Stop()coutThe vehicle has stopped!endl; /定义虚函数Stop();class bicycle: virtual public vehicle /定义派生类bicycle,声明基类为派生类的虚基类public:void Run()coutThe bicycle is running!endl;void Sto

8、p()coutThe bicycle has stopped!endl;bicycle()bicycle();class motorcar: virtual public vehicle /定义派生类motorcar,声明基类为派生类的虚基类public:void Run()coutThe motorcar is running!endl;void Stop()coutThe motorcar has stopped!endl;motorcar()motorcar();class motorcycle:public bicycle,public motorcar /以bicycle类和moto

9、rcar类作为基类派生新类motorcyclepublic:void Run()coutThe motorcycle is running!endl;void Stop()coutThe motorcycle has stopped!Run(); /通过指针调用vehicle类成员函数p-Stop();p=&b; /使指针p指向bicycle类对象bp-Run(); /通过指针调用bicycle类成员函数p-Stop();p=&c; /使指针p指向motorcar类对象cp-Run(); /通过指针调用motorcar类成员函数p-Stop();p=&d; /使指针指向motorbicycle

10、类对象dp-Run(); /通过指针调用motorcycle类成员函数p-Stop(); return 0;运行结果:3. (选做)对实验4中的People类重载“”运算符和“”运算符,“”运算符判断两个people类对象的id属性是否相等;“”运算符实现People类对象的赋值操作。源程序:#include #include using namespace std;class Birthdaypublic: Birthday(int Year,int Month,int Day); /构造函数 Birthday() /构造函数 Birthday() /析构函数 Birthday(Birthd

11、ay &p); /复制构造函数 int showBirthday() coutyear年month月day日; /内联成员函数 int enter();private:int year,month,day;Birthday:Birthday(Birthday &p)year=p.year;month=p.month;day=p.day;Birthday:Birthday(int Year,int Month,int Day) /Birthday类构造函数 year=Year; month=Month; day=Day; int Birthday:enter() coutyearmonthday

12、;class people /定义people类public:people() /people类构造函数people() /people类析构函数people(people &p);people operator=(people &);people operator-(people &);int show();int enter();private:string number,id,sex; /字符串类型变量数据成员 Birthday p1; /Birthday类数据成员;int people:show() coutn性别 sex 编号 ; coutnumber; cout 生日 ; p1.s

13、howBirthday(); /调用Birthday类成员函数 cout 身份证号 idendl;int people:enter() p1.enter(); coutsex; coutnumber; coutid;people:people(people &p):p1(p.p1) /people类复制构造函数number=p.number;sex=p.sex; id=p.id;people people:operator=(people &V) /重载=运算符成员函数 if(id=V.id) cout have the same id! endl; else cout have differ

14、ent id!endl;people people:operator-(people &U) /重载-运算符成员函数 number=U.number; /使用字符串赋值运算符 sex=U.sex; id=U.id; p1=U.p1; return *this; /返回this指针int main()int t;people p2; /定义对象数组p2for(t=0;t2;t+) /输入对象数组成员信息cout输入第t+1个人员的信息endl;pt.enter();for(t=0;t2;t+) /输出对象数组成员信息coutn第t+1个人员信息如下:endl;pt.show();people p

15、3; /定义people类的对象p3p3-p1; /使用重载运算符将p1赋给p3coutn第3个人员信息如下:endl;p3.show();coutp0,p1; p0=p1; /使用重载运算符-判断p0和p1的id是否相等return 0;运行结果:思考题1. 如何将一个运算符重载为类的成员函数?一般语法形式:返回类型 operator 运算符(形参表)函数体函数的参数个数比原来的曹祖数个数要少一个(后置“+”,“-”除外)。2. 如何将一个运算符重载为类的友元函数?一般形式:friend 返回类型 operator 运算符(形参表)函数体运算所需的操作数都需要通过函数的形参表传递,在形参表中形参从左至右的顺序就是运算符操作数的顺序,仅在需要访问类的私有成员或保护成员时才定义为友元函数。3. 如何实现运行时刻的多态?通过继承和虚函数实现。心得体会:掌握了运算符重载的方法;运算符重载可以重载为类成员函数和非成员函数;学会了使用继承和虚函数实现运行时刻的多态;在实现动态多态时,必须使用基类类型的指针或引用,是该指针指向基类的不同派生类的对象,并通过该指针指向虚函数才能实现动态的多态性。如果未声明为虚函数,则普通的派生类的新成员函数会覆盖基类同名成员函数,将不能实现运行时刻多态性。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com