C++上机实验报告6

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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++();Pointoperator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Pointoperator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。源代码:#includeiostreamusingnamespacestd;classPoint{private:double_x,_y;public:Point(){_x=0;_y=0;}Point(doublex,doubley){_x=x;_y=y;}Point&operator++();Pointoperator++(int);Point&operator--();Pointoperator--(int);voidshow();};voidPoint::show(){coutx=_xy=_yendl;}Point&Point::operator++(){_x=_x+1;_y=_y+1;return*this;}PointPoint::operator++(int){Pointold=*this;++(*this);returnold;}Point&Point::operator--(){_x=_x-1;_y=_y-1;return*this;}PointPoint::operator--(int){Pointold=*this;--(*this);returnold;}intmain(){Pointa(2,3);(a++).show();(++a).show();a.show();(a--).show();(--a).show();a.show();return0;}运行结果:2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。源代码:#includeiostreamusingnamespacestd;classvehiele{public:virtualvoidRun(){coutvehielerun\n;}virtualvoidStop(){coutvehielestop\n;}};classbicycle:virtualpublicvehiele{public:virtualvoidRun(){coutbicyclerun\n;}virtualvoidStop(){coutbicyclestop\n;}};classmotorcar:virtualpublicvehiele{public:virtualvoidRun(){coutmotorcarrun\n;}virtualvoidStop(){coutmotorcarstop\n;}};classmotorcycle:publicbicycle,publicmotorcar{public:virtualvoidRun(){coutmotorcyclerun\n;}virtualvoidStop(){coutmotorcyclestop\n;}};voidshow(vehiele*ptr){ptr-Run();ptr-Stop();}intmain(){vehielea;bicycleb;motorcarc;motorcycled;show(&a);show(&b);show(&c);show(&d);return0;}运行结果:思考题1.如何将一个运算符重载为类的成员函数?当运算符重载为类的成员函数时,函数的参数个数比原来的操作数要少一个(后置单目运算符除外),这是因为成员函数用this指针隐式地访问了类的一个对象,它充当了运算符函数最左边的操作数。因此:(1)双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。(2)前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。2.如何将一个运算符重载为类的友元函数?当运算符重载为类的友元函数时,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应3.如何实现运行时刻的多态?C++使用vtable(虚成员函数表)来实现虚成员函数的运行期绑定。虚成员函数表存在的用途是支持运行时查询,使得系统可以将某一函数名绑定到虚成员函数表中的特定入口地址。需成员函数表的实现是与系统无关的。使用动态绑定的程序会影响效率,因为虚成员函数表需要额外的存储空间,而且对虚成员函数表进行查询也需要额外的时间。纯面向对象语言由于所有的函数都以动态方式运行,因而效率的降低会相当大,而在C++中,程序员可以选择性的执行哪些函数是虚成员函数,因而既不会导致太大的效率降低,又充分利用了运行期绑定机制

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功