ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:74.07KB ,
资源ID:6514711      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6514711.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据的共享和保护以及多态性.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据的共享和保护以及多态性.docx

1、数据的共享和保护以及多态性 武汉科技大学 C+上机实验报告 实验名称:实验四 数据的共享和保护以及多态性专业班级: 姓 名: 学 号:20130413一、 实验目的1 学习数据的共享和保护。2 学习使用虚函数实现动态多态性。二、 实验内容1 声明一个Dog类,自行分析设计出其可以拥有的静态数据成员和静态成员函数,设计完整程序并测试这个类,请分析写出静态数据成员和静态成员函数的功能和用法。2 声明类X、Y、Z。实现:Y的成员函数可以访问X的私有数据成员,Z的成员函数可以访问X的数据成员。用多文件结构实现以上功能。(各类中的数据成员和函数成员请自行思考设计)3 声明一个Vehicle(车)基类,有

2、Run、Stop等成员函数,由此派生出bicycle(自行车)类和motorcar(汽车)类,从bicycle类和motorcar类派生出motorcycle(摩托车)类,它们都有Run、Stop等成员函数。实现并测试这些类,注意虚基类和虚函数的使用。4 对people类重载“”运算符和“”运算符,“”运算符判断两个people类对象的id属性的大小;“”运算符实现people类对象的赋值操作。附:people类的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”声明为一个“日期”类内嵌子对象。三、 实验注意事项程序中,需要编写一个

3、可执行函数与main主调函数,自主设计输入、输出值,使得结果可以由控制台显示输出。四、 实验程序代码(一) Dog类#include #include using namespace std;class Dogpublic: Dog()/默认构造函数 weight = 0; age = 0; name = ; void load(string na, int ag, float wgh)/录入函数 weight = wgh; age = ag; name = na; void show() cout *n狗名字: name n狗年龄:agen狗的体重:weight endl; static i

4、nt get_amount() /返回狗的数目,静态成员amount return amount; static void add_anmout()/调用静态成员amount,狗的数目+1 amount+; Dog()/析构函数private: float weight; int age; string name; static int amount;int Dog:amount = 0;Dog d2;/定义3只狗int add() float weight; int age; string name; cout *n请输入狗的名字: name; cout 请输入狗的年龄: age; cout

5、 请输入狗的体重重: weight; dDog:get_amount().load(name, age, weight); Dog:add_anmout(); return 0;int main() while (Dog:get_amount() 2) add(); dDog:get_amount()-1.show();/此时狗的数目已加,要显示上一只信息需-1 cout *n狗的总数: Dog:get_amount() endl; return 0;(二)XYZ的私有成员访问头文件中:class Xpublic: X(int a=0) x = a; /内联函数应该写在头文件里 X() fri

6、end class Y;/友元类,Y可以访问X的私有数据成员 friend class Z;/友元函数,Z中只有Zget_x()函数可以访问X私有成员 int Xget_x() return x; private: int x;class Ypublic: Y() Y() int Yget_x(const X&yx) return yx.x;/应该养成常引用的习惯;class Zpublic: Z() Z() int Zget_x(X&zx) return zx.x; /友元函数成员;/由于都是内联函数,故未使用源文件实现函数功能和部分分配空间的变量的初始化;主函数源文件:#include #

7、include XYZ.h/自定义头文件最好用“”书写方式using namespace std;int main () X A(1); Y B; Z C; cout X类对象A中的私有成员nx= A.Xget_x() nY类对象B访问A的私有成员nx= B.Yget_x(A) nZ类对象C访问A的私有成员nx= C.Zget_x(A) endl; return 0;(三)虚基类和虚函数的使用#include using namespace std; class vehicle public: vehicle(float s):speed(s) virtual void Run () cout

8、 车启动 endl; virtual void Stop() cout 车已停 endl; vehicle() protected: float speed; class bicycle : virtual public vehicle public: bicycle(float s, float w) :vehicle(s), weight(w) void Run() cout *n自行车速度: speed n自行车重: weight n自行车启动 endl; void Stop() cout 自行车已停 endl; bicycle() protected: float weight; cl

9、ass motorcar : virtual public vehicle public: motorcar(float s,int n) :vehicle(s), seatamount(n) void Run() cout *n汽车速度: speed n汽车核载人数: seatamount n汽车启动 endl; void Stop() cout 汽车已停 endl; motorcar()protected: int seatamount; class motorcycle : public bicycle, public motorcarpublic: motorcycle(float s

10、, float w, int n) :vehicle(s), bicycle(s,w), motorcar(s,n) void Run() cout *n摩托车速度: speed n摩托车重: weight n摩托车核载人数: seatamount n摩托车启动 endl; void Stop() cout 摩托车已停 endl; motorcycle() ; int main() vehicle a(15.5); bicycle b(15.5, 10.5); motorcar c(60, 4); motorcycle d(30.5,200,2); vehicle *p4 = &a,&b,&c

11、,&d ; for (int i = 0; iRun(); pi-Stop(); return 0;(四)People类,运算符重载#include#includeusing namespace std;enum SEX man, woman ; /性别属性为枚举类型class Datepublic: Date(unsigned int dy, unsigned int mon, unsigned int yr)/内联构造函数 day = dy; month = mon; year = yr; Date()/默认构造函数 day = 0; month = 0; year = 0; Date(D

12、ate&d) day = d.day; month = d.month; year = d.year; void operator =(Date d) day = d.day; month = d.month; year = d.year; int show(void) /内联成员函数 cout year 年 month 月 day 日 endl; return 0; Date() /析构函数private: unsigned int day, month, year;class Peoplepublic: People(string na, string num, SEX sx, Date

13、birth, char id_num19);/构造函数 People() People(People&p); int show(void); void operator =(People&p);/复制构造函数的功能一样,实现类的复制,且设为常成员函数,避免改变参数 int operator =(People&p); void show_name() cout 0)return 0; if (strcmp(id, p.id) = 0)return 1; if (strcmp(id, p.id) 0)return 2;int People:show(void) string temp; if (s

14、ex = man)temp = 男; else temp = 女; cout *n姓名: name n编号: number n性别: temp n出生日期:; birthday.show(); cout 身份证号: id n* endl; return 0;int main(void) Date birthday1(1, 1, 1995); People p1(A, 001, man, birthday1, 4201061995907361x); p1.show(); People p2(B, 002, man, birthday1, 42010619959073610); p2.show()

15、; People p3; p3 = p2; p3.show(); switch (p3 = p1) case 0:p3.show_name(); cout 的编号较大 endl; break; case 1:cout 两者编号一样大 endl; break; case 2:p1.show_name(); cout 的编号较大 endl; break; return 0;五、 实验运行结果(一) Dog类(二) XYZ的私有成员访问(三)虚基类和虚函数的实现(四)People类和运算符的重载六、 实验心得与体会本次试验所获颇多,很多收获都写在了程序的注释里,比如内联函数最好放在头文件里,方便声明,而在声明时内存会分配空间的变量或函数不能在,头文件里声明,以免在多个源文件里调用头文件时,一个变量或函数分配多个空间,造成连接错误,虚基类和虚函数在引用时的对应关系,隐藏规则等等等等,这里不再一一列举。在完成第四题的过程中,由于对运算符重载的错误理解,导致return空的类 ,而卡在这个 BUG上好久。用与复制构造函数一样的引用方法解决之后,身心为之畅然。总之,这次试验让我理解到了C+抽象类对象的强大之处。C+是一门更加符合人类思维逻辑的语言,在以后的学习中,我努力学习,掌握好这门强大的语言。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1