C_c++语言面试宝典整理

上传人:工**** 文档编号:559293611 上传时间:2023-12-25 格式:DOCX 页数:36 大小:177.31KB
返回 下载 相关 举报
C_c++语言面试宝典整理_第1页
第1页 / 共36页
C_c++语言面试宝典整理_第2页
第2页 / 共36页
C_c++语言面试宝典整理_第3页
第3页 / 共36页
C_c++语言面试宝典整理_第4页
第4页 / 共36页
C_c++语言面试宝典整理_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《C_c++语言面试宝典整理》由会员分享,可在线阅读,更多相关《C_c++语言面试宝典整理(36页珍藏版)》请在金锄头文库上搜索。

1、1.neew、delletee、malllocc、freee关系系deleete会会调用对对象的析析构函数数,和nnew对对应frree只只会释放放内存,nnew调调用构造造函数。malllocc与frree是是C+/C语语言的标标准库函函数,nnew/delletee是C+的运运算符。它们都都可用于于申请动动态内存存和释放放内存。对于非非内部数数据类型型的对象象而言,光光用maalocc/frree无无法满足足动态对对象的要要求。对对象在创创建的同同时要自自动执行行构造函函数,对对象在消消亡之前前要自动动执行析析构函数数。由于于malllocc/frree是是库函数数而不是是运算符符,不在在

2、编译器器控制权权限之内内,不能能够把执执行构造造函数和和析构函函数的任任务强加加于maallooc/ffreee。因此此C+语言需需要一个个能完成成动态内内存分配配和初始始化工作作的运算算符neew,以以及一个个能完成成清理与与释放内内存工作作的运算算符deelette。注注意neew/ddeleete不不是库函函数。2.deelette与 delletee 区别?delletee只会调调用一次次析构函函数,而而delletee会会调用每每一个成成员的析析构函数数。在MMoreeEfffecttiveeC+中有更更为详细细的解释释:“当deelette操作作符用于于数组时时,它为为每个数数组元

3、素素调用析析构函数数,然后后调用ooperratoordeelette来释释放内存存。”delletee与Neew配套套,deelette 与nnew 配配套 MeemTeest*mTeest11=neewMeemTeest10;MeemTeest*mTeest22=neewMeemTeest;intt*pIInt11=neewinnt110; innt*ppIntt2=nnewiint; deelettepInnt1; /-11- ddeleetepIInt22; /-2- delleteemmTesst1;/-3- delleteemmTesst2;/-4-在-4-处报错错。这就就说明:对

4、于内内建简单单数据类类型,ddeleete和和delletee功功能是相相同的。对于自自定义的的复杂数数据类型型,deelette和ddeleete不能能互用。delletee删删除一个个数组,ddeleete删删除一个个指针简简单来说说,用nnew分分配的内内存用ddeleete删删除用nnew分配配的内存存用deelette删除ddeleete会调调用数组组元素的的析构函函数。内内部数据据类型没没有析构构函数,所所以问题题不大。如果你你在用ddeleete时时没用括括号,ddeleete就就会认为为指向的的是单个个对象,否否则,它它就会认认为指向向的是一一个数组组。3.C C+ JAAVA

5、共共同点,不不同之处处?4.继承承优缺点点。类继继承是在在编译时时刻静态态定义的的,且可可直接使使用,类类继承可可以较方方便地改改变父类类的实现现。但是是类继承承也有一一些不足足之处。首先,因因为继承承在编译译时刻就就定义了了,所以以无法在在运行时时刻改变变从父类类继承的的实现。更糟的的是,父父类通常常至少定定义了子子类的部部分行为为,父类类的任何何改变都都可能影影响子类类的行为为。如果果继承下下来的实实现不适适合解决决新的问问题,则则父类必必须重写写或被其其他更适适合的类类替换。这种依依赖关系系限制了了灵活性性并最终终限制了了复用性性。(待待补充)5.C+有哪哪些性质质(面向向对象特特点)?

6、封装,继继承和多多态。在在面向对对象程序序设计语语言中,封封装是利利用可重重用成分分构造软软件系统统的特性性,它不不仅支持持系统的的可重用用性,而而且还有有利于提提高系统统的可扩扩充性;消息传传递可以以实现发发送一个个通用的的消息而而调用不不同的方方法;封封装是实实现信息息隐蔽的的一种技技术,其其目的是是使类的定定义和实实现分离离。6.子类类析构时时要调用用父类的的析构函函数吗?析构函函数调用用的次序序是先派派生类的的析构后后基类的的析构,也也就是说说在基类类的的析析构调用用的时候候,派生生类的信信息已经经全部销销毁了。定义一一个对象象时先调调用基类类的构造造函数、然后调调用派生生类的构构造函

7、数数;析构构的时候候恰好相相反:先先调用派派生类的的析构函函数、然然后调用用基类的的析构函函数JAAVA无无析构函函数深拷拷贝和浅浅拷贝 7.多态态,虚函函数,纯纯虚函数数8.求下下面函数数的返回回值(微微软)int funnc(xx) iint couuntxx = 0; whhilee(x) ccounntx +; xx = x&(x-11); rretuurn couuntxx; 假定x = 999999。 答答案:88。思路:将x转转化为22进制,看看含有的的1的个个数。9.什么么是“引引用”?申明和和使用“引引用”要要注意哪哪些问题题?答:引用用就是某某个目标标变量的的“别名名”(a

8、aliaas),对对引用的操操作与对对变量直直接操作作效果完完全相同同。申明明一个引引用的时时候,切切记要对对其进行行初始化化。引用用声明完完毕后,相相当于目目标变量量名有两两个名称称,即该该目标原原名称和和引用名名,不能能再把该该引用名名作为其其他变量量名的别别名。声声明一个个引用,不不是新定定义了一一个变量量,它只只表示该该引用名名是目标标变量名名的一个个别名,它它本身不不是一种种数据类类型,因此引引用本身身不占存存储单元元,系统统也不给给引用分分配存储储单元。不能建建立数组组的引用用。10.将将“引用用”作为为函数参参数有哪哪些特点点?(1)传传递引用用给函数数与传递递指针的的效果是是一

9、样的的。这时时,被调调函数的的形参就就成为原原来主调调函数中中的实参参变量或或对象的的一个别别名来使使用,所所以在被被调函数数中对形形参变量量的操作作就是对对其相应应的目标标对象(在在主调函函数中)的的操作。(2)使使用引用用传递函函数的参参数,在在内存中中并没有有产生实实参的副副本,它它是直接接对实参参操作;而使用用一般变变量传递递函数的的参数,当当发生函函数调用用时,需需要给形形参分配配存储单单元,形形参变量量是实参参变量的的副本;如果传传递的是是对象,还还将调用用拷贝构构造函数数。因此此,当参参数传递递的数据据较大时时,用引引用比用用一般变变量传递递参数的的效率和和所占空空间都好好。(3

10、)使使用指针针作为函函数的参参数虽然然也能达达到与使使用引用用的效果果,但是是,在被被调函数数中同样样要给形形参分配配存储单单元,且且需要重重复使用用*指指针变量量名的的形式进进行运算算,这很很容易产产生错误误且程序序的阅读读性较差差;另一一方面,在在主调函函数的调调用点处处,必须须用变量量的地址址作为实实参。而而引用更更容易使使用,更更清晰。11.在在什么时时候需要要使用“常常引用”?如果既既要利用用引用提提高程序序的效率率,又要要保护传传递给函函数的数数据不在在函数中中被改变变,就应应使用常常引用。常引用用声明方方式:cconsst 类类型标识识符 &引用名名=目标标变量名名;例1innt

11、 aa ;cconsst iint &raa=a;ra=1; /错错误a=1; /正正确 例2sttrinng ffoo( );voiid bbar(strringg & s); 那么下面面的表达达式将是是非法的的:bar(fooo( );bbar(heelloo woorldd); 原因在于于fooo( )和hhelllo wworlld串串都会产产生一个个临时对对象,而而在C+中,这这些临时时对象都都是coonstt类型的的。因此此上面的的表达式式就是试试图将一一个coonstt类型的的对象转转换为非非connst类类型,这这是非法法的。引引用型参参数应该该在能被被定义为为connst的的

12、情况下下,尽量量定义为为connst 。12.将将“引用用”作为为函数返返回值类类型的格格式、好好处和需需要遵守守的规则则?格式:类类型标识识符 &函数名名(形参参列表及及类型说说明) /函数体体 好处:在在内存中中不产生生被返回回值的副副本;(注注意:正正是因为为这点原原因,所所以返回回一个局局部变量量的引用用是不可可取的。因为随随着该局局部变量量生存期期的结束束,相应应的引用用也会失失效,产产生ruuntiime errror!注意事事项:(1)不不能返回回局部变变量的引引用。这这条可以以参照EEffeectiive C+1的Ittem 31。主要原原因是局局部变量量会在函函数返回回后被销

13、销毁,因因此被返返回的引引用就成成为了无所指指的引引用,程程序会进进入未知知状态。 (2)不不能返回回函数内内部neew分配配的内存存的引用用。这条条可以参参照Efffecctivve CC+1的的Iteem 331。虽虽然不存存在局部部变量的的被动销销毁问题题,可对对于这种种情况(返返回函数数内部nnew分分配内存存的引用用),又又面临其其它尴尬尬局面。例如,被被函数返返回的引引用只是是作为一一个临时时变量出出现,而而没有被被赋予一一个实际际的变量量,那么么这个引引用所指指向的空空间(由由neww分配)就就无法释释放,造造成meemorry lleakk。(3)可可以返回回类成员员的引用用,

14、但最最好是cconsst。这这条原则则可以参参照Efffecctivve CC+1的的Iteem 330。主主要原因因是当对对象的属属性是与与某种业业务规则则(buusinnesss ruule)相相关联的的时候,其其赋值常常常与某某些其它它属性或或者对象象的状态态有关,因因此有必必要将赋赋值操作作封装在在一个业业务规则则当中。如果其其它对象象可以获获得该属属性的非非常量引引用(或或指针),那那么对该该属性的的单纯赋赋值就会会破坏业业务规则则的完整整性。(4)流流操作符符重载返返回值申申明为“引引用”的的作用:流操作作符,这两两个操作作符常常常希望被被连续使使用,例例如:ccoutt hhel

15、llo enddl;因此这这两个操操作符的的返回值值应该是是一个仍仍然支持持这两个个操作符符的流引引用。可可选的其其它方案案包括:返回一一个流对对象和返返回一个个流对象象指针。但是对对于返回回一个流流对象,程程序必须须重新(拷拷贝)构构造一个个新的流流对象,也也就是说说,连续续的两个个操操作符实实际上是是针对不不同对象象的!这这无法让让人接受受。对于于返回一一个流指指针则不不能连续续使用操作作符。因因此,返返回一个个流对象象引用是是惟一选选择。这这个唯一一选择很很关键,它它说明了了引用的的重要性性以及无无可替代代性,也也许这就就是C+语言言中引入入引用这这个概念念的原因因吧。 赋值操操作符=。这个个操作符符象流操操作符一一样,是是可以连连续使用用的,例例如:xx = j = 100;或者者(x=10)=1000;赋赋值操作作符的返返回值必必须是一一个左值值,以便便可以被被继续赋赋值。因因此引用用成了这这个操作作符的惟惟一返回回值选择择。例3i nncl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号