版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.掌握运算符重载的方法2.学习使用虚函数实现动态多态性1.定义Point类有坐标_x_y两个成员变量对Point类重“++(自增“――(自减)运算符,实现对坐标值的改变。2.定义一个车(vehiele)基类,Run、Stop等成员函数,由此派生出自行(bicycle)类、汽车(motorcar)类从motorcar派生出摩托车(motorcycle)类它们都有RunStop等成员函数。观察虚函数的作用。3.(选做)对实验4中的People重载“==”运算符和“-”运算符,“==”运算符判断两个people类对象的id属性是否相等;“-”运算符实现类对象的赋值操作。1.编写程序定义Point类,在类中定义整型的私有成员变量,定义成员函数Point&operator++();Pointoperator++(int);以实现对Point类重载++”(自增)运算符,定义成员函数Point&operator--();Pointoperator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:.Cpp#include<iostream>usingnamespacestd;classPoint{public:Point();Point(intx,inty);~Point(){}//Point析构函数Point&operator++();//有成员函数Pointoperator++(int);Point&operator--();Pointoperator--(int);voidShow();private:int_x;//有数据成员int_y;};Point::Point(){//Point构造函数_x=0;_y=0;}Point::Point(intx,inty)//Point构造函数{_x=x;_y=y;}
Point&Point::operator++()//载后置++运算符为Point类成员函数{_x++;_y++;}PointPoint::operator++(int)//载前置++运算符为Point类成员函数{Pointold=*this;++(this->_x);++(this->_y);returnold;}Point&Point::operator--()//载后置--运算符为Point类成员函数{_x--;_y--;}PointPoint::operator--(int)//载前置--运算符为Point类成员函数{Pointold=*this;--(this->_x);--(this->_y);returnold;}voidPoint::Show()//出Point的坐标值{cout<<_x<<","<<_y<<")"<<endl;}intmain(){Pointa(2,3);//义一个Point类对象aPointb=a++;//定义Point对象b并用a++初始化bPointc=++a;//定义Point对象c并用++a初始化cPointd=--a;//定义Point对象d并用--a初始化dPointe=a--;//定义Point对象e并用a--初始化ecout<<"Pointa(";a.Show();//出a的坐标cout<<"Pointb(";b.Show();//出b的坐标cout<<"Pointc(";c.Show();//出c的坐标cout<<"Pointd(";d.Show();//出d的坐标cout<<"Pointe(";e.Show();//出e的坐标return0;}
运行结果:2编写程序定义一个车vehicle)基,有Run等成函数,由派生出自车(类、车类,从bicycle和motorcar派生出托车(motorcycle)类,们都有Run、Stop等成函数。在main()数中定义vehicle、、motorcar、motorcycle的对象调用其、Stop()函数观察其执行情况。再分别用vehicle类型的指针调用这几对象的成函数,看看能否成功;把、定义为函数,试试看。程序名:.cpp<iostream>classvehicle//基vehicle{virtualvoidvehicleis//定虚函数virtualvoidStop(){cout<<"Thestopped!"<<endl;}//定义虚数};classbicycle:virtualpublicvehicle//定派生bicycle,明基类为派生类的虚基类{bicycleisStop(){cout<<"Thebicyclestopped!"<<endl;}};classmotorcar:virtualpublic//定义派生类motorcar声明基类为派生类的虚基类{motorcarStop(){cout<<"Themotorcarstopped!"<<endl;}motorcar(){}~motorcar(){}};classmotorcycle:publicbicycle,public//以bicycle类和motorcar类为基类派新类motorcycle{isStop(){cout<<"Themotorcyclehasstopped!"<<endl;}};int{vehicle//义vehicle的一个对vehicle*p;//定义一个vehicle类的指针bicycleb;//定义bicycle类的对象bmotorcarc;//定义motorcar类对象cmotorcycle//定义类的对
b.Run();b.Stop();c.Stop();d.Run();d.Stop();p=&a;//使指针指类象//过指针调vehicle类员函数p->Stop();p=&b;//使指针指类对象b//通过针调用类成员函p->Stop();p=&c;//使针指类对象//通过针调用motorcar成员函p->Stop();p=&d;//使指指向类对//通过指调用motorcycle类员函数p->Stop();return}运行结果:3.(选做)对实验4中的People重载“==”运算符和“-”运算符,“==”运算符判断两个people类对象的id属性是否相等;“-”运算符实现类对象的赋值操作。源程序:#include<iostream>#include<string>usingnamespacestd;classBirthday{public:Birthday(intYear,intMonth,intDay);//造函数Birthday(){}//造函数~Birthday(){}//构函数Birthday(Birthday&p);//制构造函数intshowBirthday(){cout<<year<<"年"<<month<<""<<day<<"日";}//内联成员函数intenter();private:intyear,month,day;};Birthday::Birthday(Birthday&p){year=p.year;month=p.month;day=p.day;}Birthday::Birthday(intYear,intMonth,intDay)//Birthday构造函数{year=Year;
month=Month;day=Day;}intBirthday::enter(){cout<<"生日:";cin>>year>>month>>day;}classpeople{//义people类public:people(){}//people构造函数~people(){}//people析构函数people(people&p);peopleoperator==(people&);peopleoperator-(people&);intshow();intenter();private:stringnumber,id,sex;//符串类型变量数据成员Birthdayp1;//Birthday数据成员};intpeople::show(){cout<<"\n性别"<<sex<<"编号";cout<<number;cout<<"生日";p1.showBirthday();//用Birthday类成员函数cout<<"身份证号"<<id<<endl;}intpeople::enter(){p1.enter();cout<<"性别:";cin>>sex;cout<<"编号:";cin>>number;cout<<"身份证号:";cin>>id;}people::people(people&p):p1(p.p1)//people复制构造函数{number=p.number;sex=p.sex;id=p.id;}peoplepeople::operator==(people&V)//载==运算符成员函数{if(id==V.id){
cout<<"havethesameid!"<<endl;}else{cout<<"havedifferentid!"<<endl;}}peoplepeople::operator-(people&U)//载-运算符成员函数{number=U.number;//用字符串赋值运算符sex=U.sex;id=U.id;p1=U.p1;return*this;//回this指针}intmain(){intt;peoplep[2];//义对象数组p[2]for(t=0;t<2;t++)//入对象数组成员信息{cout<<"输入第"<<t+1<<"个人员的信息"<<endl;p[t].enter();}for(t=0;t<2;t++)//出对象数组成员信息{cout<<"\n第"<<t+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论