浅度探索C++对象模型 bin.ppt

浅度探索C++对象模型 bin.ppt

ID:50587530

大小:711.50 KB

页数:35页

时间:2020-03-12

浅度探索C++对象模型 bin.ppt_第1页
浅度探索C++对象模型 bin.ppt_第2页
浅度探索C++对象模型 bin.ppt_第3页
浅度探索C++对象模型 bin.ppt_第4页
浅度探索C++对象模型 bin.ppt_第5页
资源描述:

《浅度探索C++对象模型 bin.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、浅度探索C++对象模型CodingGroup张文斌2010-11-21主要内容简介单个类单一继承多重继承虚拟继承参考文献深度探索C++对象模型StanleyB.LippmanC++对象的内存布局陈皓C++对象模型学习笔记钟声C++对象的实现技术刘斌武C++简史在20世纪80年代初期发明,C++是由美国贝尔实验室的BjarneStroustrup博士发明,在C语言的基础上,借鉴了Simula语言中面向对象的特征1998年国际标准组织(ISO)颁布了C++的国际标准,通常称作ANSI/ISOC++下一次标准更新原定是在2009年,一般称该标准C++0X,但是由于对新特性的争端激烈,完整的标

2、准还遥遥无期由于C++语言过于复杂,以及经历了长年的演变,直到现在(2010年)都没有一个编译器完全符合标准目前最接近C++标准的编译器有GNUGCC4.5.0和VisualStudio2010等为什么探索C++对象模型满足对C++底层实现机制的好奇更好地使用C++找工作各种问题virtual有哪些用法?虚函数是怎么实现的?某个类对象占有多大存储空间?......面向对象的特征-抽象性抽象性是将具有一定关联的数据结构(属性)和行为(操作)的对象抽象成类,隐藏对象的属性和实现细节,仅对外公开接口面向对象的特征-继承性继承性是子类自动共享父类数据结构和方法的机制面向对象的特征-多态性表现在

3、继承中方法的重写(overwrite)多个子类从同一父类继承而来,每个子类可以重写父类的某个方法被重写的方法在不同的子类中有不同的形式例:动物会叫,因此人、猫、狗都会叫,但叫的方法不同表现在一个类中方法的重载(override/overload)一个类有多个同名的方法,但这些方法的参数个数或类型不一样例:人吃不同的东西采用不同的形式实验环境VisualStudio2008MinGWDeveloperStudio2.05gcc3.3.1代码示例问题:sizeof(Base)是多少?内存布局static成员独立于对象非static数据成员存放在每个对象中static数据成员存放在对象之

4、外所有的成员函数存放在对象之外对虚函数的支持每一个类维护一个虚函数表(vtbl),其中存放指向虚函数的指针类的每一个对象维护一个指向vtbl的指针vptr,可以通过vptr调用虚函数内存布局示例Base::Base()staticintBase::getCount()staticintBase::countBase::show()vtblcharcvptrintxobjectsizeof(Base)=12指向数据成员的指针static数据成员的地址&Point::count与&point.count等价都指向内存中的实际地址nonstatic数据成员的的地址取一个nonstatic数据

5、成员的地址,得到它在类中的偏移量,它们必须与具体的对象绑定才能取具体的值intPoint::*px=&Point::x取一个绑定于对象身上的nonstatic数据成员的地址将得到内存中该变量的实际地址int*p=&point.xNonstatic成员函数的处理nonstatic函数必须和具体的对象绑定后才能使用,经过编译器的转换后,它和非成员函数没有分别转换过程如下在参数列表中安插一个额外的参数this指针将函数体内对每一个nonstatic数据成员的存取操作转换为经由this指针来存取经过namemangling处理后,将该成员函数转换为一个外部函数VS2008Mangling实例S

6、tatic成员函数静态成员函数没有this指针,它不需要通过一个对象来调用不能够直接存取其类中的nonstatic成员不能够声明为const,virtual不需要经由类对象来调用虚函数的使用必须使用引用或指针调用虚函数,才能表现出多态用派生类对象直接对基类对象进行初始化或赋值将发生切割charcvptrcharcvptrintxBase::f()Derive::f()单个类class对于数据的封装不需要额外的开销单一继承类似单个类ParentChildGrandChild带虚函数的单一继承带虚函数的单一继承ParentChild带虚函数的单一继承GrandChild多重继承多重继承是C

7、++的一项备受争议的面向对象的建模能力,因为它会引入很多复杂性Java语言便没有这种特性多重继承虚拟继承虚拟继承用来解决多重继承时可能会重复继承多个间接父类的问题MinGWMinGWVS2008VS2008为什么探索C++对象模型谢谢:-D

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。