- 1、本文档共4页,可阅读全部内容。
- 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面试题
有点难度的C++面试题1. STL中Map内部是怎么实现的?答:红黑树.二叉树在平衡时或者叶子结点到根结点的高度在一定的范围内时工作起来是最有效的。红黑树算法是平衡树的一种算法。这个名字就是由于树的每个结点都被着上了红色或者黑色,结点所着的颜色被用来检测树的平衡性。在对结点插入和删除的操作中,可能会被旋转来保持树的平衡性。平均和最坏情况插入,删除,查找时间都是O(lg n)。详细内容请参考 Cormen [2001]。理论一个红黑树是一颗二叉查找树,具有下列的属性:1.? ???所有的结点都被着色为红色或者是黑色。2.? ???每一个叶子结点都是空结点,并且被着为黑色。3.? ???如果父结点是红色的,那么两个子结点都是黑色的。4.? ???结点到其子孙结点的每条简单路径上都包含相同数目的黑色结点。5.? ???根结点永远是黑色的。
2. 对象在内存中是怎么存放的?答:需要阅读Inside The C++ Object Model简单说来,在类对象的内存布局中,如果有虚函数,首先是该类的vtbl指针,然后才是对象数据,对象数据都是顺序存放,当然会涉及到字节对齐,这样会带来存取效率的提升.
3. 说说COM的原理和实现?答:COM,简单地说,是一种不同应用程序和不同语言来共享二进制代码的方法,不同于C++,只是源代码级的重用。Windows允许你使用DLL实现二进制级的代码共享,如kernel32.dll,user32.dll等,但因为这都是用C写的DLL,所以它们只能被C或者理解C调用方式的语言所调用。MFC引入了另一种二进制级的代码共享机制--MFC extension DLLs,但这种机制限制更多,你只能在MFC程序中使用它们。而COM通过建立一种二进制的规范来解决这些问题,这也意味着COM二进制模块要按照一种特别的结构来组织,在内存中亦然。规则是语言无关的,重担交给了编译器。COM对象在内存中的组织结构和C++的虚函数一样,这就是为什么大多数COM代码都使用C++的原因,但记住,COM确实是语言无关的,因为生成的结果代码可以被其它所有语言所使用。顺便说,COM不是Win32规范,理论上,它能移植到Unix和其它任意的操作系统,但我没见过Windows世界以外的COM.4. 为什么要用智能指针?是怎么实现的?以免资源泄漏.内部使用了引用计数机制,具体实现非常复杂.5. 给你一个指针,并用new动态申请空间,在另一个函数中释放,不知道是申请的一个元素还是一个数组的情况下,怎么确定用delete还是delete []?不同的编译器有不同的实现机制,比较常用的有两种:1.new 时,在第一个对象前面记录分配了多少对象.2.使用键值,即key-valueFor ex:int *p = new int[n];p为key,n为value.[/size][size=4]6. 虚函数是怎么实现的?答:简单说来使用了虚函数表.[/size][size=4]7. 虚函数表又是怎样实现的?答:每个含有虚函数的类有一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实现上是一个函数指针的数组。[/size][size=4]虚函数表既有继承性又有多态性。每个派生类的vtbl继承了它各个基类的vtbl,如果基类vtbl中包含某一项,则其派生类的vtbl中也将包含同样的一项,但是两项的值可能不同。如果派生类覆盖(override)了该项对应的虚函数,则派生类vtbl的该项指向重载后的虚函数,没有重载的话,则沿用基类的值。[/size][size=4]在类对象的内存布局中,首先是该类的vtbl指针,然后才是对象数据。在通过对象指针调用一个虚函数时,编译器生成的代码将先获取对象类的vtbl指针,然后调用vtbl中对应的项。对于通过对象指针调用的情况,在编译期间无法确定指针指向的是基类对象还是派生类对象,或者是哪个派生类的对象。但是在运行期间执行到调用语句时,这一点已经确定,编译后的调用代码能够根据具体对象获取正确的vtbl,调用正确的虚函数,从而实现多态性。[/size][size=4]分析一下这里的思想所在,问题的实质是这样,对于发出虚函数调用的这个对象指针,在编译期间缺乏更多的信息,而在运行期间具备足够的信息,但那时已不再进行绑定了,怎么在二者之间作一个过渡呢?把绑定所需的信息用一种通用的数据结构记录下来,该数据结构可以同对象指针相联系,在编译时只需要使用这个数据结构进行抽象的绑定,而在运行期间将会得到真正的绑定。这个数据结构就是vtbl。可以看到,实现用户所需的抽象和多态需要进行后绑定,而编译器又是通过抽象和多态而实现后绑定的.[/size]
您可能关注的文档
- 糖纸+毛根就能搞定的春季应景小手工.pdf
- 材料专业毕业设计(论文)-教学大纲.doc
- 金山学院本科毕业论文工作手册2014.doc
- 春末夏初,给教室来点清新透气的小吊饰吧.pdf
- 毕业论文各种表格的时间安排.doc
- 怀化学院本科毕业论文(设计)工作管理条例、操作流程.doc
- THM070A详细资料中文版 3 建立人机应用.pdf
- 毕业论文手册排版.doc
- 校毕业论文工作规定.doc
- 全国性毕业论设计格式.doc
- 2025至2030车身传感器行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030肠胃外药物行业项目调研及市场前景预测评估报告.docx
- 2025至2030灯具行业市场深度调研及供需格局及有效策略与实施路径评估报告.docx
- 2025至2030底部安装压力表行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030第三代测序行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030电饼铛行业项目调研及市场前景预测评估报告.docx
- 2025至2030赌桌行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030靶向药物输送系统行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030阿米卡星(CAS37517285)行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030财务管理软件行业产业运行态势及投资规划深度研究报告.docx
最近下载
- 2005年高考语文试卷及答案(广东).pdf VIP
- 2005年高考综合试题与答案(广东).doc VIP
- 万以内加减法进位退位题及答案(二年级数学计算题100道).pdf VIP
- 2025基层党支部书记考试题及答案.pptx VIP
- 2025松原市宁江区辅警考试试卷真题.docx VIP
- 在线网课学习课堂《雷达原理与系统(中国人民解放军战略支援部队信息工程)》单元测试考核答案.docx VIP
- 马克思主义新闻思想课件.pptx VIP
- 2025年全国中考语文试题病句修改汇编及答案 .pdf VIP
- 标准图集-17J008 挡土墙(重力式、衡重式、悬臂式)-第一册.pdf VIP
- 新课标下的数学课堂教学设计.docx VIP
文档评论(0)