- 1、本文档共11页,可阅读全部内容。
- 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类对象的赋值操作。
实验内容及实验步骤
1.编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以??现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。
2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。
思考题
如何将一个运算符重载为类的成员函数?
函数类型 operator 运算符(形参表)
{
函数体;
}
如何将一个运算符重载为类的友元函数?
friend 函数类型 operator 运算符(形参表)
{
函数体;
}
3.如何实现运行时刻的多态?
在基类的成员函数前加上virtual,就可以在它的派生类中声明相同名字和类型的成员函数,在运行过程中,系统会自动判断并调用相应类中的成员函数,从而在调用过程中实现多态。
源程序
lab8_1.cpp
#includeiostream
using namespace std;
class Point
{
private:
int _x;
int _y;
public:
//构造.析构函数
Point(){}
Point(int,int);
~Point(){}
//++.--重载
Point operator ++();
Point operator ++(int);
Point operator --();
Point operator --(int);
//输出点坐标
void showPoint();
};
Point::Point(int x,int y)
{
_x=x;
_y=y;
}
Point Point::operator ++()
{
_x++;
_y++;
return *this;
}
Point Point::operator ++(int)
{
Point p=*this;
++(*this);
return p;
}
Point Point::operator --()
{
_x--;
_y--;
return *this;
}
Point Point::operator --(int)
{
Point p=*this;
--(*this);
return p;
}
void Point::showPoint()
{
coutThe point is (_x,_y)endl;
}
int main()
{
Point apoint(3,5);
apoint.showPoint();
(apoint++).showPoint();//测试后置++
apoint.showPoint();
(++apoint).showPoint();//测试前置++
apoint.showPoint();
(apoint--).showPoint
您可能关注的文档
- 明辨是非(上)分析.pptx
- 明辨是非1分析.ppt
- BB_Measure讲解.ppt
- BCP业务连续性计划2015(紧急应变程序)讲解.ppt
- bx发动机原理2讲解.ppt
- 服装美术设计概述分析.pptx
- Bill-2(幕墙工程计算规则)讲解.doc
- 明清紫檀家具拍卖排行榜TOP10分析.ppt
- BIM讲解及核心软件演示讲义讲稿讲解.ppt
- B系列整理讲解.docx
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)