- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实验六多态性
1.实验目的
掌握运算符重载的方法
学习使用虚函数实现动态多态性
2.实验要求
1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。
3.(选做)对实验4中的People类重载“==”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性是否相等;“=”运算符实现People类对象的赋值操作。
3.实验内容及实验步骤
编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Pointoperator++();Pointoperator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point
&operator--();Pointoperator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。
编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。
4.思考题
如何将一个运算符重载为类的成员函数?函数类型operator运算符(形参表)
{
函数体;
}
如何将一个运算符重载为类的友元函数?friend函数类型operator运算符(形参表)
{
函数体;
}
如何实现运行时刻的多态?
在基类的成员函数前加上virtual,就可以在它的派生类中声明相同名字和类型的成员函数,在运行过程中,系统会自动判断并
调用相应类中的成员函数,从而在调用过程中实现多态。
5.源程序
lab8_1.cpp#includeiostreamusingnamespacestd;classPoint
{
private:
int_x;int_y;public:
//构造.析构函数Point(){}Point(int,int);
~Point(){}
//++.--重载Pointoperator++();Pointoperator++(int);Pointoperator--();Pointoperator--(int);
//输出点坐标voidshowPoint();
};
Point::Point(intx,inty)
{
_x=x;
_y=y;
}
PointPoint::operator++()
{
_x++;
_y++;return*this;
}
PointPoint::operator++(int)
{
Pointp=*this;
++(*this);returnp;
}
PointPoint::operator--()
{
_x--;
_y--;
return*this;
}
PointPoint::operator--(int)
{
Pointp=*this;
--(*this);returnp;
}
voidPoint::showPoint()
{
coutThepointis(_x,_y)endl;
}
intmain()
{
Pointapoint(3,5);apoint.showPoint();(apoint++).showPoint();//测试后置++apoint.showPoint();(++apoint).showPoint();//测试前置++apoint.showPoint();
(apoint--).showPoint();//测试后置--apoint.showPoint();
(--apoint).showPoint();//测试前置--apoint.showPoint();
return0;
}
lab8_2.cpp#includeiostreamusingnamespacestd;classVehi
文档评论(0)