- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对象模型的程序实现
第四章 概述 第四章 概述 过渡页 第四章 第一节 1. 类的实现 1. 类的实现 1. 类的实现 1. 类的实现 过渡页 第四章 第二节 2. 对象的实现 2. 对象的实现 构造函数 拷贝构造函数 对对象状态演化的支持 中间页 对象删除 中间页 关于封装(静态变量) 中间页 关于封装(友元) 中间页 中间页 过渡页 第四章 第三节 3. 类间关系的实现 基类成员访问控制 多重继承 多重继承 复合聚合 共享聚合 共享集合举例 关联 关联 过渡页 第四章 第四节 过渡页 第四章 第五节 5. 类模板 类CBook对其成员进行了3个级别的隐藏,其中public成员可以在CBook类之外引用, 而private成员只有在CBook类体中才能被引用,protected成员在类体或子类中可以 引用。 引入不同级别的信息隐藏从软件工程角度讲具有重要意义,通过设置不同访问级别, 可以将对对象成员的访问限制在不同范围内,既保证了类成员调用的方便性,又使 对对象成员的修改不直接影响范围之外的程序,例如CBook类使用者无法直接引用 m_pczName,要访问它必须通过公有函数GetBookName()或受保护函数 SetBookName(),因此如果使用CBook类的过程中修改了m_pczName,比如其 类型发生了变化,甚至取消这个属性,但只要保证了上面两个函数头没有变化,包 括返回值或参数等的取值与以往兼容,则其它引用这两个函数的程序就没有必要进 行修改,于是把改动m_pczName带来的负面影响限制在CBook及其派生类的范围 内。 类的声明与图3?4(d)中类的图形描述十分类似,对于简单的类,图形描述中不必描 述成员的访问限制。 其中CStudent是一个描述学生的类,而CStudent s1(“John”, 10)一句给出 的是实用这个类定义一个具体的对象s1,它是通过给CStudent类的属性 m_pczName和m_nAge分别赋值“John”和10而得到的。程序运行到这 条语句时,首先在内存中划出一块连续的内存空间用来盛载对象s1的两个 属性值,然后根据所给的实参值对这两个属性进行赋值,从此这块儿连续 的内存空间在对象s1删除前就代表了对象s1。逻辑上s1的成员函数也应该 位于这块空间中,但是为了提高内存使用效率,C++将它们分开存放,因 为所有这个类对象的成员函数是相同的。 CStudent *ps=new CStudent(“Jane”, 9)一句给出的是另一种创建对象 方法——动态创建对象。执行该语句时,new CStudent的作用是在堆中 通过对属性的赋值创建一个CStudent类的匿名对象,然后将这个匿名对 象的地址赋值给ps,这是一种十分灵活的创建对象的方法。 这个拷贝构造函数中根据实参对象的一个字符指针型属性所指的 字符串长度为新对象的相应属性分配空间,然后在将实参对象中 的字符串内容拷贝到新对象的相应属性中,新对象与实参对象间 字符指针类型属性的值并不同,即两个指针分别指向位于内存中 不同地址的两个不同字符串,但这两个字符串的内容相同。 例如例中的语句a.GetSin()、pb-GetCos()分别等价于函数main()发给对 象a和指针pb所指对象的消息GetSin和GetCos,此时没有消息参数。 具体源程序代码如下面的程序段所示。其中由于球队的队员比较多,因此并未单纯在CClassFootballTeam中使用指向CStudent类对象的指针,而是使用了一个CStudent类指针的数组用以表示球队成员列表。班委会的成员使用了指向CStudent类对象的指针表示各成员,实际上也可以使用其它方式,比如直接使用学生学号而不是CStudent类对象或指针。另外,为了描述贴近日常习惯,程序中还定义了两个枚举类型用于表述队员的职位和班委会成员的职位。程序中因为篇幅所限将足球队和班委会都限制为3个队员。 #include iostream #include string.h using namespace std; class CStudent { private: char* m_pczName; int m_nSerialNum; public: CStudent(char* pName, int nNum) { m_pczName=new char[strlen(pName)+1]; strcpy(m_pczName, pName); m_n
您可能关注的文档
- 大学物理-质点运动学.ppt
- 大地测量8.ppt
- 大学物理,力学导论(11级).ppt
- 大学物理-电磁.ppt
- 大学物理2期末复习.ppt
- 大学物理B层次--第十一章 光的衍射.ppt
- 大学物理2 牛顿定律.ppt
- 大学物理AII第四章相对论.ppt
- 大学物理_第四版_祝之光_第十一章-波动光学.ppt
- 大学物理光学热学第8章气体动理论.ppt
- 上海海洋大学《海洋环境分析技术》课件-21化学发光分析法.pdf
- 上海海洋大学《海洋环境分析技术》课件-20分子荧光分析法.pdf
- 上海海洋大学《海洋环境分析技术》课件-22色谱分离过程.pdf
- 上海海洋大学《海洋环境分析技术》课件-25气相色谱仪与固定液.pdf
- 上海海洋大学《海洋环境分析技术》课件-24色谱定性定量方法.pdf
- 上海海洋大学《海洋环境分析技术》课件-26气相色谱检测器.pdf
- 上海海洋大学《海洋环境分析技术》课件-29液相色谱固定相与流动相.pdf
- 上海海洋大学《海洋环境分析技术》课件-27气相色谱分离条件的选择.pdf
- 上海海洋大学《海洋环境分析技术》课件-28液相色谱仪器与类型.pdf
- 上海海洋大学《海洋环境分析技术》课件-3 原子光谱和分析光谱.pdf
文档评论(0)