您好,欢迎访问三七文档
VC/C++的面试题关键词:VCC++面试题、估计一下广州有多少理发师,如果允许,你还需要那些调研工作?并给出你的推导过程。你认为你的估算结果可信吗?2、看过那些软件方面的书籍3、什么是软件,软件开发包括那些步骤,并说出你对这些步骤的理解4、OSI网络结构的七层模型分别是什么,并说出你认为划分为7层的理由。5、软件过程中了解、使用过版本控制或建模工具吗?对你工作有什么帮助?6、软件过程中你都写过什么文档?分别是什么目的及其对你的帮助?7、我们知道,C++将内存划分为三个逻辑区域:堆、栈和静态存储,请说出它们的区别及你的理解。8、字符串A是由n个小写英文字母(a~z)构成的,定义为charA[n]。你能用更少的空间表示这个字符串吗?请写出从charA[n]到你的新的储存格式的转换函数。(请用C/C++编程,不允许上机操作)12、对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。9、C++构造函数为什么不能是虚函数?10、C++中virtual与inline的含义分别是什么?虚函数的特点;内联函数的特点;一个函数能否即是虚函数又是内联函数?12、请列出实现C++代码你认为需要注意的一些问题。11、你在原来的项目中有没有遇到什么困难,又是如何解决的?1dll,lib处理实现.lib文件中包含什么?dll在内存中被多个函数共享,有几个拷贝?2template,template等编译的时候作为几个类3struct,class的区别,联系4MAcro,inline区别,实现.编译运行时5进程与线程区别6hdc-cdc区别联系7modeldialog,modelessdialog,从创建到销毁全过程具体描述8各个线程new的内存,别的线程是否可以使用?9RUNTIME_CLASS,iswhat??堆和栈的区别?栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap)-一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。2.虚函数的本质和实现机制?虚函数的本质就是通过基类访问派生类定义的函数。虚函数只能借助于指针或者引用来达到多态的效果。3.C++中传递函数参数的方式及他们的优缺点?4.static关键字的作用?5.引用和指针的区别?6.函数重载和覆盖的区别?7.深拷贝和浅拷贝的区别?8.数组a[4][3]的内存结构?并指出a[2][3]和a[3][2]在内存中的位置?9.包含和私有继承的区别?10.实现一个操作栈的模板(empty,push,pop,),并实现错误处理(对空栈的pop)11.ANSI和Unicode的区别?并指出CRunTimeLibrary和Win32API对他们的支持。12.线程同步的四种方式的机制。13.虚拟内存。14.DLL的实现机制和DLL的输出方式。15.D3D的顶点着色。16.几种数据结构在游戏中的支持。17.游戏引擎服务器程序员笔试题C++1.简述堆和栈的区别。2.简述虚函数的本质和实现机制。3.列举C++中向函数传递参数的各种方式,并比较它们之间的区别和优缺点。4.static关键字有几种用途?请简述每种用途。5.简述引用和指针的异同。6.简述函数重载(overloading)和覆盖(overriding)的区别。7.什么是深拷贝?什么是浅拷贝?8.请画出二维数组chara[4][3]的内存结构图,并指出a[3][2]和a[2][3]在内存中的位置。9.简述包含和私有继承的异同。10.用模板实现一个通用的栈,要求实现empty,size,push,pop,top五个成员函数,并用异常机制来报告错误(比如在一个大小为0的栈上执行pop操作)。标准库11.用string类编写一个程序,它从标准输入接收一行输入,然后统计出其中单词的个数,单词的分隔符只有逗号、点号和空格三种。12.简述STL的容器container、迭代器iterator、算法algorithm和函数器functor的作用以及它们之间的关系,举例说明。13.下面的代码存在什么问题,如何修正?listlist1;for(inti=0;i8;i++){list1.push_back(i);}for(list::iteratorit=list1.begin();it!=list1.end();++it){if(*it%2==0){list1.erase(it);}}Win3214.比较ANSI和Unicode的区别,并说明CRuntimeLibrary和Win32API如何支持二者。15.简述线程同步的四种机制。16.简述虚拟内存机制,并描述在win95和winnt下内存空间的结构。17.简述DLL的实现机制以及输出DLL中函数的两种方法。网络18.简述TCP和UDP之间的区别。19.简述Winsock的六种主要IO处理模式。20.描述一个你以前实现过的服务器的结构图,并分析其中可能存在的瓶颈。16.关联、聚合(Aggregation)以及组合(Composition)的区别?涉及到UML中的一些概念:关联是表示两个类的一般性联系,比如“学生”和“老师”就是一种关联关系;聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如下图所示,用空的菱形表示聚合关系:从实现的角度讲,聚合可以表示为:classA{...}classB{A*a;.....}而组合表示contains-a的关系,关联性强于聚合:组合类与被组合类有相同的生命周期,组合类要对被组合类负责,采用实心的菱形表示组合关系:实现的形式是:classA{...}classB{Aa;...}参考文章:://=42217.面向对象的三个基本特征,并简单叙述之?1.封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public)2.继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。前两种(类继承)和后一种(对象组合=接口继承以及纯虚函数)构成了功能复用的两种方式。3.多态:是将父对象设臵成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。18.重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?常考的题目。从定义上来说:重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。重写:是指子类重新定义复类虚函数的方法。从实现原理上来说:重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:functionfunc(p:integer):integer;和functionfunc(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!重写:和多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。19.多态的作用?主要是两个:1.隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;2.接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。20.Ado与Ado.net的相同与不同?除了“能够让应用程序处理存储于DBMS中的数据“这一基本相似点外,两者没有太多共同之处。但是Ado使用OLEDB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体系,ADO.NET接口也就完全不同于ADO和OLEDB接口,这也就是说ADO.NET和ADO是两种数据访问方式。ADO.net提供对XML的支持。21.Newdelete与mallocfree的联系与区别?答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new会自动调用对象的构造函数。delete会调用对象的destructor,而free不会调用对象的destructor.22.#defineDOUBLE(x)x+x,i=5*DOUBLE(5);i是多少?答案:i为30。23.有哪几种情况只能用intializationlist而不能用assignment?答案:当类中含有const、reference成员变量;基类的构造函数都需要初始化表。24.C++是不是类型安全的?答案:不是。两个不同类型的指针之间可以强制转换(用reinterpretcast)。C#是类型安全的。25.main函数执行以前,还会执行什么代码?答案:全局对象的构造函数会在main函数之前执行。26.描述内存分配方式以及它们的区别?1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内臵于处理器的指令集。3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。27.struct和class的区别答案:struct的成员默认是公有的,而类的成员默认是私有的。struct和class在其他方面是功能相当的。从感情上讲,大多数的开发者感到类和结构有很大的差别。感觉上结构仅仅象一堆缺乏封装和功能的开放的内存位,而类就象活的并且可靠的社会成员,它有智能服务,有牢固的封装屏障和一个良好定义的接口。既然大多数人都这么认为,那么只有在你的类有很少的方法并且有公有数据(这种事情在良好设计的系统中是存在的!)时,你也许应该使用struct关键字,否则,你应该使用class关键字。28.当一个类A中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。(Autodesk)答案:肯定不是零。举个反例,如果是零的话,声明一个classA[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]…了。29.在8086汇编下,逻辑地址和物理地址是怎样转换的?(Intel)答案:通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。30.比较C++中的4种类型转换方式?请参考:,重点是stati
本文标题:VC++笔试面试题
链接地址:https://www.777doc.com/doc-4335351 .html