当前位置:首页 >> 院校资料 >> C++笔试题大全

C++笔试题大全


C++笔试题大全
局部变量能否和全局变量重名 能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内 引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一 个函数内可以定义多个同名的局部变量, 比如在两个循环体内都定义一个同名的局部变量, 而那 个局部变量的作用域就在那个循环体内。 如何引用一个已经定义过的全局变量? extern 可以用引用头文件的方式,也可以用 extern 关键字,如果用引用头文件方式来引用 某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用 extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么? 可以,在不同的 C 文件中以 static 形式来声明同名全局变量。 可以在不同的 C 文件中声 明同名的全局变量,前提是其中只能有一个 C 文件中对此变量赋初值,此时连接不会出错. static 全局变量与普通的全局变量有什么区别? static 局部变量和普通局部变量有什么区 别?static 函数与普通函数有什么区别? 1) 全局变量(外部变量)的说明之前再冠以 static 就构成了静态的全局变量。 全局变量本身就是 静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者 的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静 态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该 变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域 局限于一个源文件内, 只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的 生存期。 把全局变量改变为静态变量后是改变了它的作用域, 限制了它的围。 3) static 函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内 部函数(static), 内部函数应该在当前源文件中说明和定义。 对于可当前源文件以外使用的函数, 应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 综上所述: static 全局变量与普通的全局变量有什么区别: static 全局变量只初使化一次,防止在其他文件单元中被引用; static 局部变量和普通局部变量有什么区别: static 局部变量只被初始化一次,下一次依据上一次结果值; static 函数与普通函数有什么区别: static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 程序局部变量存在于(堆栈),全局变量存在于(静态区 )中,动态申请数据存在于(堆) 队列和栈有什么区别? 队列先进先出,栈后进先出 对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 C++中应用什么实现? c 用宏定义,c++用 inline 直接链接两个信令点的一组链路称作什么? PPP 点到点连接 voip 都用了那些协议? H.323 协议簇、SIP 协议、Skype 协议、H.248 和 MGCP 协议 软件测试都有那些种类? 黑盒:针对系统功能的测试 白盒:测试函数功能,各函数接口 确定模块的功能和模块的接口是在软件设计的那个队段完成的 ? 概要设计阶段 进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程 的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显 大于创建或撤消线程时的开销。 测试方法 人工测试:个人复查、抽查和会审 机器测试:黑盒测试和白盒测试 Heap 与 stack 的差别。 Heap 是堆,stack 是栈。 Stack 的空间由操作系统自动分配/释放,Heap 上的空间手动分配/释放。 Stack 空间有限,Heap 是很大的自由存储区 C 中的 malloc 函数分配的内存空间即在堆上,C++中对应的是 new 操作符。 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也 在栈上进行 Windows 下的内存是如何管理的? 分页管理 一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方 如果只想让程序有一个实例运行,不能运行两个。像 winamp 一样,只能开一个窗口,怎样 实现? 用内存映射或全局原子(互斥变量)、查找窗口句柄.. FindWindow,互斥,写标志到文件或注册表,共享内存。. 如何截取键盘的响应,让所有的'a’变成'b’? 键盘钩子 SetWindowsHookEx 存储过程是什么?有什么用?有什么优点? 我的理解就是一堆 sql 的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再 运行速度比单独执行 SQL 快很多 Template 有什么特点?什么时候用? Template 可以独立于任何特定的类型编写代码,是泛型编程的基础. 当我们编写的类和函数能够多态的用于跨越编译时不相关的类型时,用 Template. 模板主要用于 STL 中的容器,算法,迭代器等以及模板元编程. (C++的 template 是实现在库设计和嵌入式设计中的关键。 template 能实现抽象和效率的结合;同时 template 还能有效地防止代码膨胀) Windows DNA 结构的特点和优点。 Windows Distributed interNet Application Architecture(Windows 分布式应用结构,简 称 Windows DNA)是微软创建新一代高适应性商业解决方案的框架,它使公司能够充分地挖 掘数字神经系统的优点。Windows DNA 是第一个将 Internet、客户/服务器、和用于计算的 PC 模型结合并集成在一起的为新一类分布式计算方案而设计的应用软件体系结构 网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别? 1)进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。 2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程 共享数据,但拥有自己的栈空间,拥有独立的执行序列。 两者都可以提高程序的并发度,提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。 同时,线程适合于在 SMP 机器上运行,而进程则可以跨机器迁移。 什么是预编译,何时需要预编译: 就是指程序执行前的一些预处理工作,主要指#表示的. 何时需要预编译? 1)、总是使用不经常改动的大型代码体。 2)、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情 况下,可以将所有包含文件预编译为一个预编译头。 下述三个有什么区别? char * const p;

char const * p const char *p char * const p; //常量指针,p 的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和 char const *p 一个 32 位的机器,该机器的指针是多少位 指针是多少位只要看地址总线的位数就行了。80386 以后的机子都是 32 的数据总线。所以指 针的位数就是 4 个字节了。 写一个“标准”宏,这个宏输入两个参数并返回较小的一个。 #define Min(X, Y) ((X)>(Y)?(Y):(X)) //结尾没有; 嵌入式系统中经常要用到无限循环,你怎么用 C 编写死循环。 while(1){}或者 for(;;) //前面那个较好 关键字 static 的作用是什么? 1)定义静态局部变量,作用域从函数开始到结束. 2) 在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在 声明它的模块内; 3) 在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝 关键字 const 有什么含意? 1)表示常量不可以修改的变量。 2)可以修饰参数,作为输入参数. 3)修饰函数,防止以外的改动. 4)修饰类的成员函数,不改变类中的数据成员. 关键字 volatile 有什么含意?并举出三个不同的例子? 提示编译器对象的值可能在编译器未监测到的情况下改变。 例子: 硬件时钟;多线程中被多个任务共享的变量等 int (*s[10])(int) 表示的是什么啊 int (*s[10])(int) 函数指针数组,每个指针指向一个 int func(int param)的函数。 c 和 c++中的 struct 有什么不同? c 和 c++中 struct 的主要区别是 c 中的 struct 不可以含有成员函数, 而 c++中的 struct 可以。 c++中 struct 和 class 的主要区别在于默认的存取权限不同,struct 默认为 public,而 class 默认为 private. 列举几种进程的同步机制,并比较其优缺点。 原子操作 信号量机制 自旋锁 管程,会合,分布式系统 进程之间通信的途径 共享存储系统 消息传递系统 管道:以文件系统为基础 const 的理解:const char*, char const*, char*const 的区别 记忆诀窍,把一个声明从右向左读 char * const cp; ( * 读成 pointer to ) cp is a const pointer to char const char * p; p is a pointer to const char; char const * p; 同上因为 C++里面没有 const*的运算符,所以 const 只能属于前面的类型。 c 指针 int *p[n];-----指针数组,每个元素均为指向整型数据的指针。 int (*p)[n];------p 为指向一维数组的指针,这个一维数组有 n 个整型数据。 int *p();----------函数带回指针,指针指向返回的值。 int (*p)();------p 为指向函数的指针。 C++:memset ,memcpy 和 strcpy 的根本区别?

#include "memory.h" memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为' ' 或'';例:char a[100];memset(a, '', sizeof(a)); memcpy 用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度; 例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用 sizeof(a),会造成 b 的内存 地址溢出。 strcpy 就只能拷贝字符串了,它遇到'\0'就结束拷贝;例:char a[100],b[50];strcpy(a,b); 如用 strcpy(b,a),要注意 a 中的字符串长度(第一个'\0'之前)是否超过 50 位,如超过,则 会造成 b 的内存地址溢出。 strcpy 原型:extern char *strcpy(char *dest,char *src); { ASSERT((dest!=NULL)&&(src!=NULL)); Char *address = dest; While((*dest++=*src++)!=?\0?) Continue; Return dest; } 用法:#include <string.h> 功能:把 src 所指由 NULL 结束的字符串复制到 dest 所指的数组中。 说明:src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。 返回指向 dest 的指针。 memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned int count); { ASSERT((dest!=NULL)&&(src!=NULL)); ASSERT((dest>src+count)||(src>dest+count));// 防止内存重叠,也可以用 restrict 修饰指针 Byte* bdest = (Byte*)dest; Byte* bsrc = (Byte*) src; While(count-->0) *bdest++ = **bsrc++; Return dest; } 用法:#include <memory.h> 功能:由 src 所指内存区域复制 count 个字节到 dest 所指内存区域。 说明:src 和 dest 所指内存区域不能重叠,函数返回指向 dest 的指针。 Memset 原型:extern void *memset(void *buffer, char c, int count); 用法:#include 功能:把 buffer 所指内存区域的前 count 个字节设置成字符 c。 说明:返回指向 buffer 的指针。 ASSERT()是干什么用的 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式 为 FALSE (0), 程序将报告错误,并终止执行。如果表达式不为 0,则继续执行后面的语句。这 个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果, 同时也便于查找错误。例如,变量 n 在程序中不应该为 0,如果为 0 可能导致错误,你可以这 样写程序: ...... ASSERT( n != 0); k = 10/ n; ...... ASSERT 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。 assert()的功能类似,它是 ANSI C 标准中规定的函数,它与 ASSERT 的一个重要区别是可以 用在 Release 版本中。

system("pause");作用? 系统暂停程序,按任意键继续,屏幕会打印,"按任意键继续。。。" 省去使用 getchar(); 请问 C++的类和 C 里面的 struct 有什么区别? c++中的类具有成员保护功能,并且具有继承,多态这类 oo 特点,而 c 里的 struct 没有 c 里面的 struct 没有成员函数,不能继承,派生等等. 请讲一讲析构函数和虚函数的用法和作用? 析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。只 是在类对象生命期结束的时候,由系统自动调用释放在构造函数中分配的资源。这种在运行时, 能依据其类型确认调用那个函数的能力称为多态性,或称迟后联编。另: 析构函数一般在对象 撤消前做收尾工作,比如回收内存等工作, 虚拟函数的功能是使子类可以用同名的函数对父类函数进行覆盖, 并且在调用时自动调用子类覆 盖函数,如果是纯虚函数,则纯粹是为了在子类覆盖时有个统一的命名而已。 注意:子类重新定义父类的虚函数的做法叫覆盖,override,而不是 overload(重载),重载的概念 不属于面向对象编程,重载指的是存在多个同名函数,这些函数的参数表不同..重载是在编译期间 就决定了的,是静态的,因此,重载与多态无关.与面向对象编程无关. 含有纯虚函数的类称为抽象类,不能实例化对象,主要用作接口类// 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 全局变量的生命周期是整个程序运行的时间, 而局部变量的生命周期则是局部函数或过程调用的 时间段。其实现是由编译器在编译时采用不同内存分配方法。 全局变量在 main 函数调用后,就开始分配, 静态变量则是在 main 函数前就已经初始化了。 局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块) 8086 是多少位的系统?在数据总线上是怎么实现的? 8086 系统是 16 位系统,其数据总线是 20 位。 请说出 static 和 const 关键字尽可能多的作用 static 关键字至少有下列 n 个作用: (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被 分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访 问; (3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限 制在声明它的模块内; (4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能 访问类的 static 成员变量。 const 关键字至少有下列 n 个作用: (1)欲阻止一个变量被改变,可以使用 const 关键字。在定义该 const 变量时,通常需要 对它进行初始化,因为以后就没有机会再去改变它了; (2)对指针来说,可以指定指针本身为 const,也可以指定指针所指的数据为 const,或 二者同时指定为 const; (3)在一个函数声明中,const 可以修饰形参,表明它是一个输入参数,在函数内部不能 改变其值; (4)对于类的成员函数,若指定其为 const 类型,则表明其是一个常函数,不能修改类的 成员变量; (5)对于类的成员函数,有时候必须指定其返回值为 const 类型,以使得其返回值不为“左 值”。 请简述 PeekMessage 和 GetMessage 的区别。 Peekmessage 和 Getmessage 都是向系统的消息队列中取得消息, 两个函数的不同在于取不 到消息的时候,若 Getmessage()向消息队列中取不到消息,则程序的主线程会被 OS(操作 系统)挂起,等到有合适的消息时才返回;若是用 Peekmessage()在消息队列中取不到消息, 则程序会取得 OS 控制权,运行一段时间。 另外,在处理消息的时候,GetMessag()会将消息从队列中删除,而 PeekMessage()可以设置最 后一个参数 wRemoveMsg 来决定是否将消息保留在队列中。

请列出你所知道的在 Windows SDK 平台上,实现计时功能的方法。 可以使用 SetTimer 函数创建一个计时器,SetTimer 的函数原型如下: UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPR OC lpTimerFunc 请简述你所知道的 const 的各种用法。 const 常量 const 修饰类的数据成员 const 修饰指针 const 应用在函数声明中 const 应用在类成员函数 写出字符串类 String 的默认构造函数、析构函数和重载赋值运算符。 已知类 String 的原型为: class String { public: String( const char *pStr = NULL ); // 默认构造函数 ~String( void ); // 析构函数 String &operate = ( const String &Source ); // 重载赋值运算符 private: char *m_pData; // 指向字符串的指针 }; 头文件中的 ifndef/define/endif 干什么用? 防止该头文件被重复引用。 #include 和#include “filename.h” 有什么区别? :对于#include ,编译器从标准库路径开始搜索 filename.h 对于#include “filename.h”,编译器从用户的工作路径开始搜索 filename.h 在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? C++语言支持函数重载,C 语言不支持函数重载。函数被 C++编译后在库中的名字与 C 语言 的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被 C 编译器编译后在库中的名字为_foo , 而 C++ 编译器则会产生像_foo_int_int 之类的名字。 C++提供了 C 连接交换指定符号 extern“C”来解决名字匹配问题。 一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的 先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺 序依次执行),再执行成员对象的,最后执行自己的。 在 UML 中,聚合(aggregation)和组合(composition)有什么区别 聚合关系更强, 类似于 pages 和 book 的关系; 组合关系要弱, 类似于 books 和 bookshelf 的 ADO.net 和 ADO 的区别? 实际上除了“能够让应用程序处理存储于 DBMS 中的数据“这一基本相似点外,两者没有太多共 同之处。但是 ADO 使用 OLE DB 接口并基于微软的 COM 技术,而 ADO.NET 拥有自己的 ADO.NET 接口并且基于微软的 .NET 体系架构。众所周知 .NET 体系不同于 COM 体系, ADO.NET 接口也就完全不同于 ADO 和 OLE DB 接口,这也就是说 ADO.NET 和 ADO 是两 种数据访问方式。ADO.net 提供对 XML 的支持。 New delete 与 malloc free 的区别 用 malloc 函 数不 能 初始 化对 象 , new 会 调用 对 象的 构 造函 数 。 Delete 会调 用 对象 的 destructor,而 free 不会调用对象的 destructor. 有哪几种情况只能用 intialization list 而不能用 assignment? 当类中含有 const、reference 成员变量;基类的构造函数都需要参数;类中含有其他类的成 员变量,而该类的构造函数都需要参数。 C++是不是类型安全的? 不是。两个不同类型的指针之间可以强制转换。C#是类型安全的。 main 函数执行以前,还会执行什么代码? 全局对象的构造函数会在 main 函数之前执行。 描述内存分配方式以及它们的区别。

1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行 期间都存在。例如全局变量,static 变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或 new 申请任意多少的 内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由我们决定,使 用非常灵活,但问题也最多。 什么是虚拟存储器?virtual memory 怎样映射到 physical memory?页面替换算法有哪 些? 掌握的页面替换算法 NRU,FIFO,第二次机会页面替换算法,LRU 比较一下 C++中 static_cast 和 dynamic_cast 的区别。 Struct 和 class 的区别 struct 中成员变量和成员函数默认访问权限是 public,class 是 private 当一个类 A 中没有生命任何成员变量与成员函数,这时 sizeof(A)的值是多少,如果不是零, 请解释一下编译器为什么没有让它为零。 肯定不是零。我举个反例,如果是零的话,声明一个 class A[10]对象数组,而每一个对象占用 的空间是零,这时就没办法区分 A[0],A[1]…了 在 8086 汇编下,逻辑地址和物理地址是怎样转换的?( Intel) 通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得 到了真正要访问的地址。 描述一下 C++的多态 C++的多态表现在两个部分,一个是静态连编下的函数重载,运算符重载;动态连编下的虚函 数、纯虚函数(抽象类) 请说出 const 与#define 相比优点 (1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。 而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 (2) 有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。 简述数组与指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型 的内存块。 (1)修改内容上的差别 char a[] = “hello”; a[0] = ?X?; char *p = “world”; // 注意 p 指向常量字符串 p[0] = ?X?; // 编译器不能发现该错误,运行时错误 (2) 用运算符 sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指 针变量的字节数,而不是 p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量, 除非在申请内存时记住它。 注意当数组作为函数的参数进行传递时, 该数组自动退化为同类型的 指针。 char a[] = "hello world"; char *p = a; cout<< sizeof(a) << endl; // 12 字节 cout<< sizeof(p) << endl; // 4 字节 计算数组和指针的内存容量 void Func(char a[100]) { cout<< sizeof(a) << endl; // 4 字节而不是 100 字节 } 类成员函数的重载、覆盖和隐藏区别 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。

覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有 virtual 关键字。 “隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字, 基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual 关键 字。此时,基类的函数被隐藏(注意别与覆盖混淆) STL 中 container 有哪些 vector,list,set,multiset,map,multimap,deque,bitset map 中的数据存储方式是什么? Hashtable 介绍一下 STL,详细说明 STL 如何实现 vector。 STL (标准模版库,Standard Template Library)它由容器算法迭代器组成。 STL 有以下的一些优点: 可以方便容易地实现搜索数据或对数据排序等一系列的算法; 调试程序时更加安全和方便; 即使是人们用 STL 在 UNIX 平台下写的代码你也可以很易理解(因为 STL 是跨平台的)。 vector 实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。 如果用 VC 开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。 在学习 VC++的过程中,遇到的 LNK2001 错误的错误消息主要为: unresolved external symbol “symbol”(不确定的外部“符号”)。 如果连接程序不能在所有的库和目标文件内找到所引用的函数、 变量或标签, 将产生此错误消息。 一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用 错误;其次可能使用了不同版本的连接库。 编程中经常能遇到 LNK2005 错误——重复定义错误,其实 LNK2005 错误并不是一个很难 解决的错误. 继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。 在 OOD,OOP 中,组合优于继承. 当然多态的基础是继承,没有继承多态无从谈起。 当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。 当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类. 指针和引用有什么分别; 如果传引用比传指针安全, 为什么?如果我使用常量指针难道不行吗? (1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必 初始化,可以在定义后面的任何地方重新赋值. (2) 不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是 NULL. (3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在 任何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系. (4) 引用的创建和销毁并不会调用类的拷贝构造函数 (5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的, 只不过编译器帮我们完成了转换. 不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的 引用,显得很安全。 const 指针仍然存在空指针,并且有可能产生野指针. 总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性. 参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么; 传值,传指针或者引用 框架与设计模式的区别: 1,二者针对的问题域不同.设计模式针对面向对象的问题域;框架针对特定业务的问题域 2,设计模式比框架更抽象.设计模式在碰到具体问题后,才能产生代码;框架已经可以用代码表示 3,设计模式是比框架更小的体系结构元素.框架中可以包括多个设计模式

设计模式就像武术中基本的招式.将这些招式合理地纵组合起来,就形成套路(框架),框架是一种 半成品. C++和 C 定义结构的分别是什么。 C 的结构仅仅是数据的结合 C++的 struct 和 class 其实具备几乎一样的功能,只是默认的访问属性不一样而已。 构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢? 构造函数不能为虚函数, 要构造一个对象, 必须清楚地知道要构造什么, 否则无法构造一个对象。 析构函数可以为纯虚函数。 拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。 深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没有拷贝资源 这样使得两个指针指向同一份资源,造成对同一份析构两次,程序崩溃。 临时对象的开销比局部对象小些。 基类的有 1 个虚函数,子类还需要申明为 virtual 吗?为什么。 不申明没有关系的。 不过,我总是喜欢显式申明,使得代码更加清晰。 C 也可以通过精心封装某些函数功能实现重用,那 C++的类有什么优点吗,难道仅仅是为实 现重用。 并不仅仅是这样的。 OOD,OOP 从根本上改变了程序设计模式和设计思想,具备重大和深远 的意义。 C++特点是什么,如何实现多态?画出基类和子类在内存中的相互关系。 多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。 子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数, operator= 函数,友元函数等等 为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果。 介绍一下模板和容器。如何实现? 模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。 它体现了一种通用和泛化的思想。 STL 有 7 种主要容器:vector,list,deque,map,multimap,set,multiset. 多重继承如何消除向上继承的二义性。 使用虚拟继承即可. 什么是“引用”?申明和使用“引用”要注意哪些问题? 引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申 明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称, 即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定 义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引 用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。 将“引用”作为函数参数有哪些特点? (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数 中的实参变量或对象的一个别名来使用, 所以在被调函数中对形参变量的操作就是对其相应的目 标对象(在主调函数中)的操作。 (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使 用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变 量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引 用比用一般变量传递参数的效率和所占空间都好。 (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给 形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序 的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易 使用,更清晰。 在什么时候需要使用“常引用”? 如果既要利用引用提高程序的效率, 又要保护传递给函数的数据不在函数中被改变, 就应使用常 引用。常引用声明方式:const 类型标识符 &引用名=目标变量名; 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则 ? 格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }

好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的 引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生 runtime error! 注意事项: (1)不能返回局部变量的引用。这条可以参照 Effective C++[1]的 Item 31。主要原因是局 部变量会在函数返回后被销毁, 因此被返回的引用就成为了"无所指"引用, 程序会进入未知状态。 (2) 不能返回函数内部 new 分配的内存的引用。 这条可以参照 Effective C++[1]的 Item 31。 虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部 new 分配内存的引用), 又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个 实际的变量,那么这个引用所指向的空间(由 new 分配)就无法释放,造成 memory leak。 (3)可以返回类成员的引用,但最好是 const。这条原则可以参照 Effective C++[1]的 Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常 与某些其它属性或者对象的状态有关, 因此有必要将赋值操作封装在一个业务规则当中。 如果其 它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的 完整性。 (4)流操作符重载返回值申明为“引用”的作用: 流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括: 返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造 一个新的流对象, 也就是说, 连续的两个<<操作符实际上是针对不同对象的! 这无法让人接受。 对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个 唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是 C++语言中引入引用这 个概念的原因吧。赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此 引用成了这个操作符的惟一返回值选择。 (5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则运算符。它们不能返回引用, Effective C++[1] 的 Item23 详细的讨论了这个问题。主要原因是这四个操作符没有 side effect,因此,它们必须构造一个对象作为返回值,可选的方案包括:返回一个对象、返回一个 局部变量的引用,返回一个 new 分配的对象的引用、返回一个静态对象引用。根据前面提到的 引用作为返回值的三个规则,第 2、3 两个方案都被否决了。静态对象的引用又因为((a+b) == (c+d))会永远为 true 而导致错误。所以可选的只剩下返回一个对象了。 引用与多态的关系? 引用是除指针外另一个可以产生多态效果的手段。 这意味着, 一个基类的引用可以指向它的派生 类实例。 引用与指针的区别是什么? 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的 可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是 上面提到的对函数传 ref 和 pointer 的区别。 什么时候需要“引用”? 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它 情况都推荐使用引用。 结构与联合有和区别? 1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个 被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址 不同)。 2. 对于联合的不同成员赋值, 将会对其它成员重写 , 原来成员的值就不存在了, 而对于结构的 不同成员赋值是互不影响的。 关联、聚合(Aggregation)以及组合(Composition)的区别? 关联是表示两个类的一般性联系,比如“学生”和“老师”就是一种关联关系;聚合表示 has-a 的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责从实现的角度讲,聚合可以表示 为: class A {...} class B { A* a; .....} 而组合表示 contains-a 的关系,关联性强于聚合:组合类与被组合类有相同的生命周期,组合 类要对被组合类负责

实现的形式是: class A{...} class B{ A a; ...} 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别? 重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类 型不同,或许两者都不同)。 重写:是指子类重新定义复类虚函数的方法。 从实现原理上来说: 重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同 的 函 数 ( 至 少 对 于 编 译 器 来 说 是 这 样 的 ) 。 如 , 有 两 个 同 名 函 数 : function func(p:integer):integer;和 function func(p:string):integer;。那么编译器做过修饰后的 函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确 定了,是静态的。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关! 重写:和多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类 指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的 虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。 进程死锁的原因 资源竞争及进程推进顺序非法 死锁的 4 个必要条件 互斥、请求保持、不可剥夺、环路 死锁的处理 鸵鸟策略、预防策略、避免策略、检测与解除死锁 操作系统中进程调度策略有哪几种? FCFS(先来先服务),优先级,时间片轮转,多级反馈 类的静态成员和非静态成员有何区别? 类的静态成员每个类只有一个,非静态成员每个对象一个 纯虚函数如何定义?使用时应注意什么? virtual void f()=0; 是接口,子类必须要实现 数组和链表的区别 数组:数据顺序存储,固定大小 链表:数据可以随机存储,大小可动态改变 ISO 的七层模型是什么?tcp/udp 是属于哪一层?tcp/udp 有何优缺点? 应用层 表示层 会话层 运输层 网络层 物理链路层 物理层 tcp /udp 属于运输层 TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。 与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由 于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。 tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好 udp: 不提供稳定的服务,包头小,开销小 (void *)ptr 和 (*(void**))ptr 的结果是否相同? 其中 ptr 为同一个指针(void *)ptr 和 (*(void**))ptr 值是相同的 函数既然不会被其它函数调用,为什么要返回 1? mian 中,c 标准认为 0 表示成功,非 0 表示错误。具体的值是某中具体出错信息 要对绝对地址 0x100000 赋值,我们可以用(unsigned int*)0x100000 = 1234;那么 要是想让程序跳转到绝对地址是 0x100000 去执行,应该怎么做? *((void (*)( ))0x100000 ) ( ); 首先要将 0x100000 强制转换成函数指针,即: (void (*)())0x100000 然后再调用它: *((void (*)())0x100000)(); 用 typedef 可以看得更直观些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)(); 已知一个数组 table,用一个宏定义,求出数据的元素个数 #define NTBL #define NTBL (sizeof(table)/sizeof(table[0]))

线程与进程的区别和联系? 线程是否具有相同的堆栈? dll 是否有独立的堆栈? 进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系 统就帮你创建了一个主线程。 每个线程有自己的堆栈。DLL 中有没有独立的堆栈? 这个问题不好回,或者说这个问题本身是否有问题。因为 DLL 中的代码是被某些线程所执行, 只有线程拥有堆栈,如果 DLL 中的代码是 EXE 中的线程所调用,那么这个时候是不是说这个 DLL 没有自己独立的堆栈?如果 DLL 中的代码是由 DLL 自己创建的线程所执行, 那么是不是说 DLL 有独立的堆栈? 以上讲的是堆栈,如果对于堆来说,每个 DLL 有自己的堆,所以如果是从 DLL 中动态分配的内 存,最好是从 DLL 中删除,如果你从 DLL 中分配内存,然后在 EXE 中,或者另外一个 DLL 中 删除,很有可能导致程序崩溃。 free 只是释放的 str 指向的内存空间,它本身的值还是存在的.所以 free 之后,有一个好的习惯 就是将 str=NULL. 此时 str 指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段存储空间 是可能被重新分配给其他变量的, 尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了),但是通常会打印出 world 来。 这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。 当你 malloc 一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些), 然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点),并将可用内存的地址 返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续访问这 块地址的。 堆与栈的的区别 A. 申请方式不同 Stack 由系统自动分配,而 heap 需要程序员自己申请,并指明大小。 B. 申请后系统的响应不同 Stack:只要栈的剩余空间大于申请空间,系统就为程序提供内存,否则将抛出栈溢出异常 Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存地址的链表,寻找第一个大于 所申请空间的堆结点,然后将该结点从空间结点链表中删除,并将该结点的空间分配给程序。另 外,大多数系统还会在这块内存空间中的首地址处记录本次分配的大小,以便于 delete 语句正 确释放空间。而且,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动将多余的 那部分重新放入空闲链表。 C. 申请大小限制的不同 Stack:在 windows 下,栈的大小是 2M(也可能是 1M 它是一个编译时就确定的常数),如 果申请的空间超过栈的剩余空间时,将提示 overflow。因此,能从栈获得的空间较小。 Heap:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的 空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计 算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。 D. 申请效率的比较: 栈由系统自动分配,速度较快。但程序员是无法控制的。 堆是由 new 分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。 另外,在 WINDOWS 下,最好的方式是用 VirtualAlloc 分配内存,他不是在堆,也不是在栈 是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。但是速度快,也最灵活。 E. 堆和栈中的存储内容 栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语 句)的地址,然后是函数的各个参数,在大多数的 C 编译器中,参数是由右往左入栈的,然后 是函数中的局部变量。注意静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然 后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续 运行。 堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 含参数的宏与函数的优缺点 宏: 优点:在预处理阶段完成,不占用编译时间,同时,省去了函数调用的开销,运行效率高 缺点:不进行类型检查,多次宏替换会导致代码体积变大,而且由于宏本质上是字符串替换,故

可能会由于一些参数的副作用导致得出错误的结果。 函数: 优点:没有带参数宏可能导致的副作用,进行类型检查,计算的正确性更有保证。 缺点:函数调用需要参数、返回地址等的入栈、出栈开销,效率没有带参数宏高 宏与内联函数的区别 内联函数和宏都是在程序出现的地方展开, 内联函数不是通过函数调用实现的, 是在调用该函数 的程序处将它展开(在编译期间完成的);宏同样是; 不同的是:内联函数可以在编译期间完成诸如类型检测,语句是否正确等编译功能;宏就不具有 这样的功能,而且宏展开的时间和内联函数也是不同的(在运行期间展开) Windows 程序的入口是哪里?写出 Windows 消息机制的流程 第一步,Windows 程序的入口是 WinMain()函数。 第二步,Windows 应用程序消息处理机制: 第三步,操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中 应用程序在消息循环中调用 GetMessage 函数从消息队列中取出一条一条的消息, 取出消息后, 应用程序可以对消息进行一些预处理。 第四步,应用程序调用 DispatchMessage,将消息回传给操作系统。 第五步,系统利用 WNDCLASS 结构体的 lpfnWndProc 成员保存的窗口过程函数的指针调用 窗口过程,对消息进行处理。 如何定义和实现一个类的成员函数为回调函数 简而言之,回调函数就是被调用者回头调用调用者的函数。 使用回调函数实际上就是在调用某个函数(通常是 API 函数)时,将自己的一个函数(这个函 数为回调函数)的地址作为参数传递给那个被调用函数。而该被调用函数在需要的时候,利用传 递的地址调用回调函数。 回调函数,就是由你自己写的,你需要调用另外一个函数,而这个函数的其中一个参数,就是你 的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调 函数里完成你要做的事。 如何定义和实现一个类的成员函数为回调函数 要定义和实现一个类的成员函数为回调函数需要做三件事: a.声明; b.定义; c.设置触发条件,就是在你的函数中把你的回调函数名作为一个参数,以便系统调用 如: 一、声明回调函数类型 typedef void (*FunPtr)(void); 二、定义回调函数 三、设置触发条件 C. 回调函数与 API 函数 回调和 API 非常接近,他们的共性都是跨层调用的函数。但区别是 API 是低层提供给高层的调 用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层 他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的 API,安装后低层不 知道这个回调的名字,但它通过一个函数指针来保存这个回调函数,在需要调用时,只需引用这 个函数指针和相关的参数指针。 其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下, 低层通过该函数指针调用高层那个函数。 在 c 语言库函数中将一个字符转换成整型的函数是 atool()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 用法: long atol(const char *nptr); 对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 C++中应用什么实现? c 用宏定义,c++用 inline 直接链接两个信令点的一组链路称作什么? PPP 点到点连接

有哪几种情况只能用 intialization list 而不能用 assignment? 当类中含有 const、reference 成员变量;基类的构造函数都需要初始化表。 C++是不是类型安全的? 不是。两个不同类型的指针之间可以强制转换(用 reinterpret cast)。C#是类型安全的。 main 函数执行以前,还会执行什么代码? 全局对象的构造函数会在 main 函数之前执行。 描述内存分配方式以及它们的区别? 1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期 间都存在。例如全局变量,static 变量。 2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束 时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。 3)从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或 new 申请任意多少的内 存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由程序员决定,使 用非常灵活,但问题也最多。 struct 和 class 的区别 struct 的成员默认是公有的,而类的成员默认是私有的。 struct 和 class 在其他方面是功能 相当的。 从感情上讲, 大多数的开发者感到类和结构有很大的差别。 感觉上结构仅仅象一堆缺乏封装和功 能的开放的内存位,而类就象活的并且可靠的社会成员,它有智能服务,有牢固的封装屏障和一 个良好定义的接口。 既然大多数人都这么认为, 那么只有在你的类有很少的方法并且有公有数据 (这种事情在良好设计的系统中是存在的!)时,你也许应该使用 struct 关键字,否则,你应 该使用 class 关键字。 当一个类 A 中没有生命任何成员变量与成员函数,这时 sizeof(A)的值是多少,如果不是零, 请解释一下编译器为什么没有让它为零。(Autodesk) 肯定不是零。举个反例,如果是零的话,声明一个 class A[10]对象数组,而每一个对象占用的 空间是零,这时就没办法区分 A[0],A[1]?了。 在 8086 汇编下,逻辑地址和物理地址是怎样转换的?( Intel) 通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得 到了真正要访问的地址。 比较 C++中的 4 种类型转换方式? 分别写出 BOOL,int,float,指针类型的变量 a 与“零”的比较语句。 请说出 const 与#define 相比,有何优点? 1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。 而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 2)有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。 类成员函数的重载、覆盖和隐藏区别? a.成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 b.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有 virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字, 基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual 关键 字。此时,基类的函数被隐藏(注意别与覆盖混淆)


更多相关文档:

最全的C和C++语言笔试面试题汇总

C_C++_笔试面试题大全(1... 190页 免费最​全​的​C​和​C​...最全的 C 语言试题总结 C 语言终极面试宝典_C 语言面试必 C 语言 第一部分...

CC++笔试经典题库

185页 1下载券 50个C、C++面试题 26页 1下载券 华为笔试题大全(史上最齐... 86页 1下载券C​C​+​+​笔​试​经​典​题​库 暂无评...

常见c++笔试题整理(含答案)

C C++笔试题大全 89页 1下载券 c++笔试题汇总 25页 1下载券 华为笔试题大全...(使用 C++,不建议 用伪码) 块式管理:把主存分为一大块、一大块的,当所需...

C C++经典面试300多道题(附详细答案)

华为笔试题大全(史上最齐... 86页 1下载券 C_C++面试题300 56页 1下载券...​试​3​0​0​多​道​题​(​附​详​细​答​案...

C++笔试题

C++笔试题_计算机软件及应用_IT/计算机_专业资料。1、普天 C++笔试题 1.实现双向链表删除一个节点 P,在节点 P 后插入一个节点,写出这两个函数。 2.写一个...

C++笔试题目-带答案

___ ___ 三、问答题(5*10+9+15=74) 1.编写类 String 的拷贝构造函数和赋值函数(可以调用 C++/C 的字符串库函 数)(15)。已知类 String 的原型为: cl...

C++题库大全

C++题库大全_IT认证_资格考试/认证_教育专区。C++题库大全 第1 题:输入 5 ...C_C++经典面试题大全 12页 1下载券 C语言面试题大全 58页 2下载券 C语言...

C++面试题(基础)

C++面试题(基础)_IT/计算机_专业资料。C++基础面试题,比较全面。1. const 符号常量: (1) 、const char *p (2) 、char const *p (3) 、char * const p...

C++经典笔试题汇总

C_C++笔试题集锦 (已排版) 35页 免费 算法大全-面试题-数据结构 54页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反...

C、C++笔试题集锦

C C++笔试题大全 89页 免费 c++笔试题汇总(全) 281页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com