欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    C++经典面试题库 附带参考答案.docx

    • 资源ID:1406788       资源大小:118.70KB        全文页数:105页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++经典面试题库 附带参考答案.docx

    1. 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象,2. 什么是类?答:把些具有共性的对象归类后形成一个集合,也就是所谓的类。3. 对象都具有的两方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。净态特征是指能描述对象的一些属性(成员变量),动态特征是指对以表现出来的行为(成员函数)4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率5. 在类的内部定义成员函数的函数体,这种函数会具备那种属性?答:这种函数全自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。6. 成员函数通过什么来区分不同对象的成员数据?为什么它能够区分?答:通过this指针指向对象的首地址来区分的。7.C+编译器自动为类产生的四个缺省函数是什么?答:默认构造函数,拷贝构造函数,析构函数,赋值函数。8. 拷贝构造函数在第几种情况下会被调用?答:1 .当类的个对象去初始化该类的另个对象时:2 .如果函数的形参是类的对彖,谢用函数进行形参和实参结合时:3 .如果函数的返回值是类对象,函数调用完成返回时。9. 构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数.一般情况下,它是专门用来初始化对象成员变量的。构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。10. 什么时候必须重写拷贝构造函数?答:当构造函数涉及到动态存储分配空间时,要自己写舟贝构造函数,并Il要深拷贝。11. 构造函数的调用Mi序是什么?答:1.先调用基类构造函数2 .按声明顺序初始化数据成员3 .最后调用自己的构造函数。12. 哪几种情况必须用到初始化成员列表?答:类的成员是常量成员初始化;类的成员是对缴成员初始化,而该对象没有无参构造函数。类的成员为引用时。13. 什么是常对象?答:常对象是指在任何场合都不能对其成员的值进行修改的对象。14. 静态函数存在的意义?答:静态私有成员在类外不能被访问,可通过类的静态成员函数来访问;当类的构造函数是私有的时,不像普通类那样实例化自己,只能通过睁态成员函数来调用构造函数。15. 在类外有什么办法可以访问类的非公有成员?答:友元,继承,公有成员函数。16. 什么叫抽象类?答:不用来定义对缭而只作为一种基本类型用作继承的类。17. 运算符重就的意义?答:为了对用户自定义数据类型的数据的操作与内定义的数据类型的数据的操作形式一致。18. 不允许重栽的5个运算符是缪些?答:.*(成员指针访问运算符号)2. :域运匏符3. Sizeof长度运算符号4. ?:条件运算符号1.1. 成员访问符19. 运算符重栽的三种方式?答:普通函数,友元函数,类成员函数。20. 流运算符为什么不能通过类的成员函数直就?一般怎么解决?答:因为通过类的成员函数重载必须是运算符的第个是自己,而对流运算的重教要求第一个参数是流对象.所以一般通过友元来解决.21. 赋值运算符和拷贝构造函数的区别与联系?答:相同点:都是将个对象CoPy到另一个中去。不同点:拷贝构造函数涉及到要新建立一个对软。22. 在筹种情况下要调用该类的析构函数?答:对象生命周期结束时“23. 对象间是怎样实现数据的共享的?答:通过类的静态成员变量来实现对象间的数据共享。静态成员变量占有自己独立的空间不为某个对象所私有。24. 友元关系有什么特性?答:单向的,非传速的,不能继承的。25. 对对象成员进行初始化的次序是什么?答:它的次序完全不受它们在初始化表中次序的影响,只有成员对象在类中声明的次序来决定的.26. 类和对象之间的关系是什么?答:类是对象的抽彖,对象是类的实例。27. 对类的成员的访问属性有什么?答:public,protected,private.28. constchar*p和Charconstp;的区别答:如果ConSt位于星号的左他,则COnSt就是用来修饰指针所指向的变量,即指针指向为常量:如果ConSt位于星号的右侧,COnSt就髭修饰指针本身.即指针本身是常量。29. 是不是一个父类写了一个VirtUal函数,如果子类及Ii它的函数不加virtual,也能实现多态?答:virtual修饰符会被除形维承的.virtual可加可不加,子类覆盖它的函数不加VirtUa,也能实现多态30. 函数重我是什么意思?它与虚函数的概念有什么区别?答:函数或我是一个同名函数完成不同的功能,编译系统在编译阶段通过函数参数个数、参数类型不同,函数的返回值来区分该调用哪一个函数,即实现的是静态的多态性。但是记住:不能仅仅通过函数返回值不同来实现函数重数,而虚函数实现的是在基类中通过使用关键字virtual来中明一个函数为虚函数,含义就是该函数的功能可能在招来的派生类中定义或者在基类的基础之上进行扩屣,系统只能在运行阶段才能动态决定该调用哪一个函数,所以实现的是动态的多态性。它体现的是个纵向的概念,也即在基类和派生类间实现。31. 构造函数和析构函数是否可以被栽,为什么?答:构造函数可以被应栽,析构函数不可以被近载。因为构造函数可以有多个且可以带参数,而析构函数只能有一个,且不能带参数。32. 如何定义和实现一个类的成员函数为回调函数?答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。定义一个类的成员函数时在该函数前加CAI.I.BACK即将其定义为回调函数,函数的实现和普通成员函数没有区别33. 虚函数是怎么实现的?答:简单说来使用了虚函数表.34. 抽象类不会产生实例,所以不需要有构造函数.错35. 从一个模板类可以派生新的模板类,也可以派生非模板类.对36. Dain函数执行以前,逐会执行什么代码?答案:全局对象的构造函数会在main函数之前执行。37. 当一个类A中没有生命任何成员变量与成员函皴,这时SiZeOf(八)的值是多少,如果不是零,请解狎一下编译器为什么没有让它为零.(Autodesk)答案:肯定不是零.举个反例,如果是零的话,声明一个ClaSSA10对象数组,而每一个对象占用的空间是写,这时就没办法区分AO,A1了。38. delete与delete口区别:答:delete只会调用一次析构函数,而delete口会调用每一个成於的析构函数.39. 子类析构时要调用父类的析构函数吗?答:会调用。析构函数调用的次序是先派牛类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了40. 继承的优缺点.1,类继承是在编译时刻静态定义的,且可直接使用,2、类继承可以较方便地改变父类的实现。缺点:1、因为维承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现2,父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为3、如果继承下来的实现不适合解决新的问通,则父类必须重写或被其他更适合的类替换,这种依赖关系限制灵活性并最终限制f史用性。41. 解狎堆和栈的区别.答:校区(StaCk)-由编译器自动分配糅放,存放函数的参数值,局部变量的值等。堆(heap)一般由程序员分配择放,若程序员不粹放,程序结束时可能由OS回收。42. 一个类的构造函数和析构函数什么时候被调用,是否需要手工调用?答:构造函数在创建类对以的时候被自动调用,折构函数在类对象生命期结束时,由系统自动调用。43. 何时需要覆编译;答:总是使用不经常改动的大型代码体。程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编洋选项。在这种情况下,可以将所有包含文件预编译为一个预编洋头。44. 多态的作用?答:主要是两个:.隐藏实现细节,使得代码能够模块化:扩展代码模块,实现代码选用:2.接口重用:为r类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用45. 虚拟函数与普通成员函数的区别?内联函数和构造函数能否为虚拟函数?答案:区别:虚拟函数有VirtUal关键字,有虚拟指针和虚函数表,虚拟指针就是虚拟函数的接口,而普通成员函数没有。内联函数和构造函数不能为虚拟函数,46. 构造函数和析构函数的调用顺序?析构函数为什么要虚拟?答案:构造函数的调用顺序:基类构造函数一对象成员构造函数一派生类构造函数:析构函数的调川顺序与构造函数相反.析构函数虚拟是为J'防止析构不彻底,造成内存的泄漏。47. C+中类型为PriVate的成员变,可以由哪些函数访问?答:只可以由本类中的成员函数和友元函数访问48. 请说出类中PriVate,protect,PUbliC三种访问限制类型的区别答:Private是私有类型,只有本类中的成员函数访问;protect是保护型的,本类和继承类可以访问:PUbliC是公有类型,任何类都可以访问.49. 类中成员变量怎么进行初始化?答:可以通过构造函数的初始化列表或构造函数的函数体实现。50. 在什么时候需要使用“常引用”?答:如果既要利用引用提高程序的效率,乂要保护传递给函数的数据不在函数中被改变,就应使用常引用.51. 引用与指针有什么区别?答、1)引用必须被初始化,指针不必。2)引用初始化以后不能被改变,指针可以改变所指的对象。3)不存在指向空值的引用,但是存在指向空值的指针。52. 描述实时系统的基本特性答、在特定时间内完成特定的任务,实时性与可靠性.54. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答、全局变量储存在静态数据区,局部变量在堆枝中。55. 堆栈溢出一般是由什么原因导致的?答、没有回收垃圾资源56. 什么函数不能声明为虚函数?答构造函数(constructor)57. IP地址的编码分为弊信部分?答IP地址由两部分组成,网络号和主机号。58. 不能做SwitchO的参数类型是;答、SWitCh的参数不能为实型。59. 如何引用一个已羟定义过的全局变,?答、可以用引用头文件的方式,也可以用extern关值字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编洋期间不会报错,而在连接期间报错60. 对于一个频繁使用的短小函数,在C语言中应用什么实现,在C+中应用什么实现?答、C用宏定义,c+用inline61. C+是不是类型安全的?答案:不是。两个不同类型的指针之间可以强制转换(用reinterpretcast)62. 当一个类A中没有生命任何成员变量与成员函数,这时8izeof(八)的值是多少,请解释一下给译器为什么没有让它为零.答案:为1。举个反例,如果是零的话,声明一个ClaSSA10对象数组,而每个对象占用的空间是零,这时就没办法区分A0,AU了。63. 而述数坦与指针的区别?答:数组要么在静态存储区被创建(如全局数组),要么在校上被创建。指针可以随时指向任意类型的内存块。(1)修改内容上的区别chara11="hello”;a0='X,;char*p="world”;注意P指向常量字符串p0='X'/编译器不能发现该错误,运行时错误(2)用运算符Sizeof可以计鸵出数组的容量(字节数)。sizeof(p),p为指针得到的是个指针变量的字节数,而不是P所指的内存容量。64. Cl函数中值的传递方式答:有三种方式:值传递、指针传递、引用传递65. 内存的分配方式答:分配方式有三种,I、岸态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变盘、常量。2、梭上分配,函数内的局部变量就是从这分配的,但分配的内存容易仃限。3、堆上,分配,也称动态分配,如我们用new,malIoc分配内存,用delete,free来释放的内存。66. externC*有什么作用?答:EXtern“C”是由C+提供的一个连接交换指定符号,用F告诉C+这段代码是C函数。这是因为C+,编译后库中函数名会变得很长,与C生成的不一致,造成C+不能直接调用C函数,加上extren“c”后,C+就能直接调用C函数了。Extern“C”主要使用正规D1.1.函数的引用和导出和在C+包含C函数或C头文件时使用。使用时在前面加上extern"c”关键字即可。可以用句话概括extern''C”这个声明的真实目的:实现C+与C及其它语言的混合编程。67. 用什么函数开启新进程、线程。答案:线程:CrealeThread/AfxBeginThread等进程:CreaIeProCeSS等68. SendMessage和PostMessage有"什么区别答案:SendMeSSage是阻塞的,等消息被处理后,代码才能走到SendMeSSage的下行。P。StMCSSagC是非阻塞的,不管消息是否已被处理,代码马上走到PostMessage的下一行。69. CMcmoryState主要功能是什么答案:查看内存使用情况,解决内存泄露问题。70. ffinclude<fiIename.h>和includefilename,hw有什么区别?答:对于#include<fiIename.h>,编译器从标准阵路径开始搜索filename.h对于#include“filename,h”,编译器从用户的工作路径开始搜索filename.h71. 处理器标识#error的目的是什么?答:编译时输出一条错误信息,并中止继续编译。72. #if!defined(AFX_-_HADE_H)Mefine(AFX_-_HADE_H)加ndif作用?答:防止该头文件被重曳引用.73. 在定义一个宏的时候要注意什么?答:定义部分的每个形参和整个表达式都必须用括号括起来,以避免不可预料的错误发生74. 数坦在做函数实弁的时候会转变为什么类型?答:数组在做实参时会变成指针类型。75. 系统会自动打开和关闭的3个标准的文件是?(1) 标准输入键盘一stdin(2) 标准输出显示器一stdout(3) 标准出错输出-显示器一Stderr76.在Win32下Char,int,float,double各占多少位?(1)Char占用8位(2)Int占用32位Float占用32位(4)Double占用64位77. 8丫0和1»««丫0的区别?答:SlrePyo和memcpy都可以用来拷贝字符串,SircpyO拷贝以'0'结束,但memcpy0必须指定拷贝的长度。78. 说明define和const在语法和含义上有什么不同?答:(1)*define是C语法中定义符号变员的方法,符号常信只是用来表达一个值,在编译阶段符号就被值替换了,它没有类型;(2) COnSt是C+语法中定义常变量的方法,常变量具有变量特性,它具有类型,内存中存:在以它命名的存储单元,可以用SiZeOi测出长度。79. 说出字符常量和字符申常量的区别,井使用运算符SiZeOf计算有什么不用?答:字符常量是指单个字符,字符串常量以*0,结束,使用运算符SiZeof计养多占一字节的存储空间。80. 简述全局变量的优缺点?答:全局变量也称为外部变量,它是在函数外部定义的变量它属于个源程序文件,它保存上一次被修改后的值,便F数据共享,但不方便管理,易引起意想不到的错误。81. 总结static的应用和作用?答:(1)函数体内SlaliC变量的作用范:围为该函数体,不同于UUI。变量,该变量的内存只被分配一次,因此其值在卜一次调用时仍维持上次的值:(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问:(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用葩闹被限制在声明它的模块内:(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝:(5)在类中的StatiC成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量“82. 总结const的应用和作用?答:(1)欲阻止一个变量被改变,可以使用ConSt关键字。在定义该ConSt变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了:(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const.或二者同时指定为COnSt:(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值:(4)对于类的成员函数,若指定其为COnSt类型,则表明其是个常函数,不能修改类的成分变量:(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”83. 什么是指针?慎谈你对指针的理解?答:指针是一个变量,该变量专门存放内存地址:指针变量的类型取决于其指向的数据类型,在所指数据类型前加*指针变量的特点是它可以访问所指向的内存。84. 什么是常指针,什么是指向常变量的指针?答:常指针的含义是该指针所指向的地址不能变,但该地址所指向的内容可以变化,使用常指针可以保证我们的指针不能指向其它的变量,指向常变量的指针是指该指针的变量本身的地址可以变化,可以指向我它的变量,但是它所指的内容不可以被修改。指向长变量的指针定义,85. 函数指针和指针函数的区别?答:函数指针是指向一个函数入口的指针:指针函数是函数的返回值是个指针类型。87. 简述DebUg版本和ReleaSe版本的区别?答:DebUg版本是调试版本,Release版本是发布给用户的最终非调试的版本,88. 指针的几种典型应用情况?答:i11t*pn:-一指针数组,每个元素均为指向整型数据的指针。int(*)pn;p为指向一维数组的指针,这个一维数组有n个整型数据。int*p():一一函数带回指针,指针指向返回的值。int为指向函数的指针。89. static函数与普通函数有什么区别?答:StatiC函数在内存中只有份,普通函数在每个被调用中维持份拷贝90. StrUCt(结构)和Union(联合)的区别?答:1.结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结构的所有成员都存在(不同成员的存放地址不同)。2.对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值是互不影响的.91. class和struct的区别?答:StrUCt的成员默认是公有的,而类的成员默认是私有的,92. 简述枚举类型?答:枚举方便一次定义一组常量,使用起来很方便:93. assert()的作用?答:ASSERTO是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FA1.SE(0),程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现/明显非法的数据,如果出现了终止程序以免导致严全后果,同时也便于查找错误。94. 局部变量和全局变量是否可以同名?答:能。局部会屏蔽全局。要用全局变盘,需要使用“(城运算符95. 程序的局部交,存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中.96. 在什么时候使用常引用?答:如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。97. 类的声明和实现的分开的好处?答:1.起保护作用:2. 提高编译的效率。98. EndgS消息系统由哪几部分构成?答:由一下3部分组成:1. 消息队列:操作系统负责为进程维护一个消息队列,程序运行时不断从该消息队列中获取消息、处理消息:2. 消息循环:应用程序通过消息循环不断获取消息、处理消息。3. 消息处理:消息循环负市将消息派发到相关的窗口上使用关联的窗口过程函数进行处理.99. 什么是消息映射?答:消息映射就是让程序员指定MFC类(有消息处理能力的类处理某个消息,然后由程序员完成对该处理函数的编写,以实现消息处理功能。100. 什么是In)P和TCP的区别是什么?答:TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。UDP全称为用户报文协议,它可以提供非连接的不可苑的点到多点的通信。用TCP还是UDP,那要看你的程序注重哪一个方面?可靠还是快速?101. EnSOCk建立连接的主要实现步充?答:服务器端:SoCketo建立套接字,绑定(bind)并监听(listen)»用acceptO等待客户端连接,accept()发现有客户端连接,建立个新的套接字,自身歪新开始等待连接。该新产生的套接字使用SendO和recv()写读数据,直至数据交换完毕,closes。Cketo关闭套接字。客户端:SOCkeIo建立套接字,连接(connecl)服务器,连接上后使用Sendo和rccv(),在套接字上写读数据,直至数据交换完毕,ClosesocketO关闭套接字.102. 进程间主要的通讯方式?答:信号量,管道,消息,共享内存103. 构成Win32API函数的三个动态链接犀是什么?答:内核库,用户界面管理库,图形设备界面库。104. 创建一个窗口的步震是?答:填充一个窗口类结构-注册这个窗口类-然后再创建窗口-显示窗口-更新窗口。105. 模态对话框和非模态对话框有什么区别?答:1.调用规则不同:前者是用DOMOdUIo调用,后者通过属性和Sh。WWindOIro来显示。2 .模态对话框在没有关闭前用户不能进行其他操作,而非模态对话框可以。3 .非模态对话框创建时必须编写自己的共有构造函数,还要调用CreHIeo函数。106 .从EDlT樨中取出数据给关联的变量,已经把关联的变景的数据显示在EDrr根上的函数是什么?答:1.pdateData(TRUE),1.pdatedata(FA1.SE).107 .传单介倒GDI?答:GDl是GraPhiCSDeViCCInterface的缩写,译为:图形设符接口:是一个在WindOWS应用程序中执行与设备无关的函数库,这些函数在不同的输出设备上产生图形以及文字输出。108 .Idndoir8消息分为几类?并对各类做简单描述.答:1.窗口消息:与窗口相关的消息,除WHCOMMAND之外的所有以册I开头的消息:2 .命令消息:用于处理用户请求,以WMaMiAV)表示的消息:3 .控件通知消息:统由ZMN)TIFT表示,4 .用户自定义消息。109 .如何自定义消息?答:使用WVUSER和B1.APP两个宏来自定义消息,110 .简述VisualC+、Win32APl和MFC之间的关系?答:(DVisualC+是一个以C+程序设计语言为基础的、集成的、可视化的编程环境:(2) Win32APl是32位Windows操作系以C/C"形式提供的一组应用程序接口:(3) MFC是对Win32APl的封装,简化了开发过程。111.怎样消除多重继承中的二义性?答:1.成员限定符2.虚基类112什么叫静态关联,什么叫动态关联答:在多态中,如果程序在编译阶段就能确定实际执行动作,则称静态关联,如果等到程序运行才能确定叫动态关联。113多态的两个必要条件答:1.一个基类的指针或引用指向一个派去类对象2.虚函数114 .什么叫智能指针?答:当一个类中,存在一个指向另一个类对以的指针时,对指针运算符进行重载,那么当前类对级可以通过指针像调用自身成员一样调用另一个类的成员。115 .什么时候需要用虚析构函数?答:当基类指针指向用new运算符生成的派生类对象时,delete基类指针时.派生类部分没有释放掉而造成释放不彻底现象,需要虚析构函数.补充:虚函数就是让派生类调用基类的虚函数。116 .MFC中,大部分类是从舞个类继承而来?答:CObject117 .什么是平衡二叉树?答:左右子树都是平衡二叉树,而且左右子树的深度差值的约对值不大于1。118 .语句for(I1,)有什么问题?它是什么意思?答:无限循环,和WhiIe(I)相同.119 .派生断类的过程要经历三个步骤答:I.吸收必类成员2.改造基类成员3.添加新成员121. TCP/IP建立连接的过程答:在TCP/IP协议中,TCP协议提供可苑的连接服务,采用三次握手建立个连接.第次握手:建立连接时,客户端发送连接请求到服务器,并进入SdSEM)状态,等待服务器确认:第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态:第三次握手:客户湍收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手122. Daset,mencpy的区别答:memset用来对段内存空间全部设置为某个字符,般用在对定义的字符申进行初始化为0'mcmcpy用来做内存拷贝,你可以案它拷贝任何数据类型的对象,可以指定拷贝的数据长度:123. 在C+程序中调用被C编译器编译后的函数,为什么要加extern答:C+语言支持函数重载.C语言不支持函数重数。函数被C+编译后在库中的名字与C语言的不同。假设某个函数的原型为:voidfoo(intX,inty):该函数被C编译播编译后在库中的名字为S。,而C+编译器则会产生像foointint之类的名字。C+提供了C连接交换指定符号exlern“C”来解决名字匹配问题。124怎样定义一个纯虚函数?含有纯虚函数的类称为什么?答:在虚函数的后面加=0,含有虚函数的类称为抽缴类。125 .已知8trcpy函数的原型是1charstrcpy(char*strDest,constcharStrSrC);不调用库函数,实现8trcpy函数其中,8trSrc是原字符串,8trDe8t是目标字符串.答案,char*strcpy(char*strDcst,constchar*strSrc)(if(strDest=NU1.1.istrSrc=NU1.1.)returnNU1.1.;if(strDest=strSrc)returnstrDest;char*tcmpptr=strDest:指针teupptr指向strDest的地址Swhile(*strDest+=*strSrc+)!='0')注意:别忘了转义符;*returnUmpplr;返回指针向的地址;)126 .已知类String的原型为:classString(public:String(nstchar*str=NU1.1.);/普通构造函数String(constStringother);/拷贝构造函数String(void);.析构函数String&operate=(constStringftother):/St值函数private:char*三-data;./用于保存字符串):请编写String的上述4个函数.答案:/普通构造函数String:String(constchar*str)(if(str-=NU1.1.)8trlen在弁数为NU1.1.时会抽异常才会有这步判断(m_data=newcharlj;mdata=")else(n-data三newChaHStrIen(StT)+1;strcpy(mdata,str);)拷贝构造函数String:String(constString&other)(m_data=newcharstrlcn(other.m_data)+1;strcpy(m_data,other.m_data);)赋值函数(IR载运兑符)String&String:operator=(constStringfiother)(if(this=other)return+this:deletemdata:m_data=newcharstrlen(other.m_data)+1;strcpy(indata,other,mdata);return*this:)析构函数String:String(void)(deletemdata;)127 .类成员函数的重就、覆盖和除鼠的区别答案:成员函数被币:我的特征:(1)相同的范围(在同一个类中);(2)函数名字相同:(3)参数不同:(4)virtual关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范圉(分别位于派生类与基类);(2)函数名字相同;(3)参数相同:(4)基类函数必须有VirtUal关键字。“隐版”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关铤字,基类的函数将被陶版(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有VirtUal关键字.此时,基类的函数被隐藏(注意别与覆盖混溶)128 .如何打印出当前源文件的文件名以及源文件的当前行号?答案:COUt«_FI1.E;cout<<_1.INE_;FI1.E_和_1.1NE_是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。129 .文件中有一组整致,要求排序后,出到另一个文件中答案:voidOrder(vector<inl>&duia)目泡排序intcount=data,size();inttag=false;for(inti=0;i<count;i+)(for(intj=0;j<count-i-1;j+)(if(dataj>dataj+lj)(tag=true:inttemp=dataj:dataj=dataj+l;<lataj+l=IemP:)if(!tag)break;)voidmain(void)vector<int>data;ifstreanin(mc:dalu.txt',);if(!in)(CoUt<<"fileerror!”;exit(l);)inttemp;while(!in.eofO)(in>>temp:data.PUSh_back(temp);)in.closeO;Order(data);ofstreamout(*c:result.txt,'):if(!out)(cout<<,*fileerror!”:exit(l):)for(i=O;i<data,size();i+)out<<datai<<,*";out.close();130. 一个雒表的结点结构structNode(intdata;Node*next;):typedefstructNodeNode;已知彼表的头结点head,写一个函数把这个锥表逆序(Intel)答案:NodeRevcrse1.ist(Node*head)/偿表逆序(if(head-NU1.1.head->nextNU1.1.)returnhead:Node*pl=head:Node*p2=pl->next:Node*p3=p2->next;pl->next-NU1.1.;while(p3!=NU1.1.)Ip2->next-pl;Pl=P2;p2=p3:)p2->next=pl:head三p2;returnhead;)131. 一个健表的结点结构structNode(intdata;Node*next;;typedefstructNodeNode:已知两个能表headl和head2各自有序,请把它们合并成一个健表依然有序.答案:Node*Merge(Node*headl,Node*head2)(if(headl=NU1.1.)returnhead2;if(head2=NU1.1.)returnheadl:Node*head=NU1.1.:Node*pl=NU1.1.;if(headl->data<head2->data)head-headl:pl=headl->next;p2=hcad2;)else(head三head2:p2=hcad2->next:pl=headl:)Node*pcurrent-head;while(pl!=NU1.1.Up2!=NU1.1.)(if(pl->data<=p2->data)(pcurrent->next=pl;pcurrent=pl;pl=pl->nexl:)elsepcurrent->next=p2;pcurrent=p2;p2=p2->next:)if(pl!=NU1.1.)PCUrrent->next=pl;if(p2I=NU1.1.)pcurrent->nexl=p2;returnhead;)132 .已知两个链表headl和head2各自有序,谙把它们合并成一个链表依然有序,这次要求用递归方法进行。(Autodesk)答案:NodeMergeRecursive(Node*headl,Node*head2)(if(headl=NU1.1.)returnhead2;if(head2=NU1.1.)returnheadl:Node*head=NU1.1.;if(headl->data<head2->data)head=headl:head->nexl=MergeRecursive(headI->next,head2);)else(head

    注意事项

    本文(C++经典面试题库 附带参考答案.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开