- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高质量C编程指南5
第五章、C++高级特性 5.1 类与对象 一、类是数据成员和函数成员的组合: 1、类中任何数据成员都不能用auto、extern、register关键字修饰。 2、如果程序中只出现类的定义,而未声明该类的实例—对象,则编译器不会给该类分配任何空间(静态成员除外)。 二、对象的内存映像 1、简单的非多态类 例:类Rectangle的声明如下: class Rectangle { public: Rectangle( ):m_length(1),m_width(1){ … } ~ Rectangle( ) { … } float GetLength( ) const { return m_length; } void SetLength(float length ) { m_length=length; } float GetWidth( ) const { return m_width; } void SetWidth( float width) { m_width= width; } void Draw( ) {…} static unsigned int GetCount( ) { return m_count;} protected: Rectangle(const Rectangle copy) {…} Rectangle operator=(const Rectangle assign) { … } private: float m_length; //长 float m_width; //宽 static unsigned int m_count; //对象计数 }; 该类对象模型有这样三个规则: (1)非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 (2)静态数据成员被提取出来放在程序的静态数据区内为该类所有对象共享,因此仅存在一份。 (3)静态和非静态成员函数最终都被提取出来放在程序代码段中并为该类所有对象共享,因此每一个成员函数也只存在一份代码实体。 因此构成对象本身的只有数据,任何成员函数都不隶属于任何一个对象,非静态成员函数与对象的关系就是绑定,绑定的中介就是this指针。 成员函数为该类所有对象共享,不仅出于简化语言实现、节省存储的目的,而且是为了使同类对象具有一致的行为。同类对象的行为虽然一致,但是操作不同的数据成员。 下面是Rectangle类对象的内存映像 2、带有派生类的内存映像: 假设Rectangle派生自抽象类Shape,Shape有一个属性m_color,并且把Draw移到Shape中作为纯虚函数,如下所示: class Shape { public: Shape( ):m_color(0) { } virtual ~Shape( ) { } float GetColor( ) const { return m_color; } void SetColor(float color) {m_color=color;} virtual void Draw( )=0; private: float m_color; //颜色 }; 增加了继承和虚函数的类的对象模型变得更加复杂,规则如下: (1)派生类继承基类的非静态数据成员,并作为自己的专用数据成员。 (2)派生类继承基类的非静态成员函数,并像自己的成员函数一样访问。 (3)为每一个多态类创建一个虚函数指针数组vtable,该类的所有虚函数的地址都保存在这张表里。 (4)多态类的每一个对象(如果有)中安插一个指针成员vptr,其类型为指向函数指针的指针,它指向所属类的vtable;vptr就是C++对象的隐含数据成员之一,实际上它是被安插在多态类的定义中。 (5)为了支持RTTI,为每一个多态类创建一个type_info 对象,并把其地址保存在vtable中的固定位置(一般为第一个位置)。现在的Rectangle的对象模型如下: 这个模型有如下特点: (1)从一个派生类对象入手,可以直接访问到基类的数据成员,因为基类的数据成员被直接嵌入到派生类对象。 (2)不论派生层次有多深,派生类对象访问基类对象的数据成员和成员函数时,与访问自己的数据成员和成员函数没有任何效率差异。 (3)由于派生类数据成员和基类数据成员的这种紧密关系,当基类定义发生改变的时候(例如删除或增加成员),派生
您可能关注的文档
- 微课《团队建设之你会关注谁》笔记.docx
- 湖南省长郡中学、衡阳八中等十三校重点中学2017届高三第二次联考 英语.doc.docx
- 外贸英语函电试卷 答案版.doc
- 美国信息自由法案.doc
- 五星级酒店VI设计项目列表.doc
- 文综地理:向36题要we.ppt
- 苏武传张衡传重点语句翻译.ppt
- 高三政治计算题.ppt
- 计重收费报表系统后台处理的操作说明(必威体育精装版)[1B9].doc
- 酒店管理公司VI模板.doc
- 2025年内科护理(中级)自我提分评估及答案详解【网校专用】.docx
- 2025年内科护理(中级)自我提分评估及参考答案详解(考试直接用).docx
- 2025年内科护理(中级)自我提分评估及参考答案详解(考试直接用).docx
- 云南xx生产线建设项目商业计划书(范文).docx
- 2025年内科护理(中级)自我提分评估及答案详解【考点梳理】.docx
- 2025年内科护理(中级)自我提分评估word版附答案详解.docx
- 2024-2025学年初中信息技术(信息科技)七年级上册(2016)闽教版(2016)教学设计合集.docx
- 2025年内科护理(中级)能力检测试卷(预热题)附答案详解.docx
- 2025年内科护理(中级)能力检测试卷附完整答案详解【各地真题】.docx
- 2025年内科护理(中级)试卷及完整答案详解【全国通用】.docx
最近下载
- 整点报时数字钟设计.docx VIP
- 三年高考真题(2022-2024)分类汇编 物理 专题31电磁感应 电路和动力学 含解析.docx VIP
- 2025年商业银行移动金融行业洞察报告及未来五至十年发展趋势预测报告.docx
- GB 50015-2019 建筑给水排水设计标准.docx VIP
- 《GB 10816-2008紫砂陶器国家标准》.pdf
- GB/T 10816-1989紫砂陶器.pdf
- (完整版)技能考试调饮师精选试题及答案.docx VIP
- GB50015-2019建筑给水排水设计标准.doc VIP
- GB 50015-2019 建筑给水排水设计标准.docx
- 村庄规划调研提纲.doc VIP
文档评论(0)