浅度探索C对象模型bin3

上传人:痛*** 文档编号:136124193 上传时间:2022-08-16 格式:PPT 页数:35 大小:711.50KB
返回 下载 相关 举报
浅度探索C对象模型bin3_第1页
第1页 / 共35页
浅度探索C对象模型bin3_第2页
第2页 / 共35页
浅度探索C对象模型bin3_第3页
第3页 / 共35页
点击查看更多>>
资源描述
浅度探索C+对象模型Coding Group张文斌2010-11-21主要内容n简介n单个类n单一继承n多重继承n虚拟继承参考文献n深度探索C+对象模型lStanley B.LippmannC+对象的内存布局l陈皓nC+对象模型学习笔记 l钟声nC+对象的实现技术l刘斌武C+简史n在20世纪80年代初期发明,C+是由美国贝尔实验室的Bjarne Stroustrup博士发明,在C语言的基础上,借鉴了Simula语言中面向对象的特征n1998年国际标准组织(ISO)颁布了C+的国际标准,通常称作ANSI/ISO C+n下一次标准更新原定是在2009年,一般称该标准C+0X,但是由于对新特性的争端激烈,完整的标准还遥遥无期n由于C+语言过于复杂,以及经历了长年的演变,直到现在(2010年)都没有一个编译器完全符合标准n目前最接近C+标准的编译器有GNU GCC 4.5.0和Visual Studio 2010等为什么探索C+对象模型n满足对C+底层实现机制的好奇n更好地使用C+n找工作各种问题nvirtual有哪些用法?n虚函数是怎么实现的?n某个类对象占有多大存储空间?n.面向对象的特征-抽象性n抽象性是将具有一定关联的数据结构(属性)和行为(操作)的对象抽象成类,隐藏对象的属性和实现细节,仅对外公开接口面向对象的特征-继承性n继承性是子类自动共享父类数据结构和方法的机制面向对象的特征-多态性n表现在继承中方法的重写(overwrite)l多个子类从同一父类继承而来,每个子类可以重写父类的某个方法被重写的方法在不同的子类中有不同的形式l例:动物会叫,因此人、猫、狗都会叫,但叫的方法不同n表现在一个类中方法的重载(override/overload)l一个类有多个同名的方法,但这些方法的参数个数或类型不一样l例:人吃不同的东西采用不同的形式实验环境nVisual Studio 2008nMinGW Developer Studio 2.05lgcc 3.3.1代码示例问题:sizeof(Base)是多少?内存布局nstatic成员独立于对象n非static数据成员存放在每个对象中nstatic数据成员存放在对象之外n所有的成员函数存放在对象之外n对虚函数的支持l每一个类维护一个虚函数表(vtbl),其中存放指向虚函数的指针l类的每一个对象维护一个指向vtbl的指针vptr,可以通过vptr调用虚函数内存布局示例Base:Base()static int Base:getCount()static int Base:countBase:show()vtblchar cvptrint xobjectsizeof(Base)=12指向数据成员的指针nstatic数据成员的地址l&Point:count与&point.count等价都指向内存中的实际地址nnonstatic数据成员的的地址l取一个nonstatic数据成员的地址,得到它在类中的偏移量,它们必须与具体的对象绑定才能取具体的值nint Point:*px=&Point:xl取一个绑定于对象身上的nonstatic数据成员的地址将得到内存中该变量的实际地址nint*p=&point.xNonstatic成员函数的处理nnonstatic函数必须和具体的对象绑定后才能使用,经过编译器的转换后,它和非成员函数没有分别n转换过程如下l在参数列表中安插一个额外的参数this指针l将函数体内对每一个nonstatic数据成员的存取操作转换为经由this指针来存取l经过name mangling处理后,将该成员函数转换为一个外部函数VS2008 Mangling实例Static成员函数n静态成员函数没有this指针,它不需要通过一个对象来调用l不能够直接存取其类中的nonstatic成员l不能够声明为const,virtuall不需要经由类对象来调用虚函数的使用n必须使用引用或指针调用虚函数,才能表现出多态n用派生类对象直接对基类对象进行初始化或赋值将发生切割char cvptrchar cvptrint xBase:f()Derive:f()单个类nclass 对于数据的封装不需要额外的开销单一继承n类似单个类ParentChildGrandChild带虚函数的单一继承带虚函数的单一继承nParentnChild带虚函数的单一继承nGrandChild多重继承n多重继承是 C+的一项备受争议的面向对象的建模能力,因为它会引入很多复杂性nJava 语言便没有这种特性多重继承虚拟继承n虚拟继承用来解决多重继承时可能会重复继承多个间接父类的问题MinGWMinGWVS2008VS2008为什么探索C+对象模型谢谢:-D
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!