设为首页 加入收藏

TOP

C++面试题及解释
2014-11-24 01:25:51 来源: 作者: 【 】 浏览:6
Tags:试题 解释

1.C与C++的异同,优劣;
2.C,C++,VC,BC,TC的区别;
3.C++中try…catch关键字的用法与优点;
4.枚举的用法,以及它与宏的区别;
5.const的用法,以及声明const变量与宏的区别;
const的用法有四种:1. const常量,如const int max = 100;2. const 修饰类的数据成员;3. const修饰指针的情况;4. 在一个函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。
? 区别:1.const常量有数据类型, 而宏常量没有数据类型;2.编译器可以对前者进行类型安全检查,而对后者只能进行字符替换,没有类型安全检查,而且字符替换可能会带来料想不到的边界效应;3. 有些集成化工具可以对const常量进行调试, 但不能对宏量进行调试。
6.C++中引用与指针的区别;
? 答:1 引用实际上是所引用的对象或变量的别名,而指针是包含所指向对象或变量的地址的变量。
?? 2 引用在定义时必须初始化,而指针在定义时不初始化。
?? 3 不可以有努NULL的引用,而可以有指向NULL的指针。
?? 4 引用在初始化后不可以改变引用关系,而指针可以随时指向其他对象(非const指针)。
7.C++中virtual与inline的含义分别是什么?
? 答:在基类成员函数的声明前加上virtual关键字,意味着将该成员函数声明为虚函数。
?? inline与函数的定义体放在一起,使该函数称为内联。inline是一种用于实现的关键字,而不是用于声明的关键字。
??虚函数的特点;如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编。
??内联函数的特点;使用内联函数的目的是为了提高函数的运行效率。内联函数体的代码不能过长,因为内联函数省去调用函数的时间是以代码膨胀为代价的。内联函数不能包含循环语句,因为执行循环语句要比调用函数的开销大。
??一个函数能否即是虚函数又是内联函数?可以,建议不使用?
8.以下关键字的含义与用法:
??extern,extern “C”,static,explicit,register,#undef,#ifndef
??9.什么是函数重载与覆盖?
??为什么C不支持函数重载?
??为什么C++能支持函数重载?
??10.VC中,编译工具条内的Debug与Release选项是什么含义?


Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug带有大量的调试代码,运行时需要相应的运行库,发布模式程序紧凑不含有调试代码和信息,直接可以运行(如果不需要运行库)
??11.编写my_memcpy函数,实现与库函数memcpy类似的功能,不能使用任何库函数;
?? void* mymemcpy(void* pvTo, const char* pvFrom, size_t size)
?? { assert((dest != NULL) && (src != NULL));
?? byte* psTo = (byte*)pvTo;
?? byte* psFrom = (byte*)pvFrom;
?? while (size– > 0)
?? {*psTo++ = *psFrom++;}
?? return pvTo;
?? }
??12.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;
?? 答:char* my_strcpy(char* strdest, const char* strsrc)
?? { assert((strdest != NULL) && (strsrc != NULL))
?? char* address = strdest;
?? while((*strdest++ = *strsrc++) != NULL)
?? return address;
?? }??
??13.编写gbk_strlen函数,计算含有汉字的字符串的长度,汉字作为一个字符处理;
??已知:汉字编码为双字节,其中首字节<0,尾字节在0~63以外;(如果一个字节是-128~127)
??14.函数assert的用法
??答:断言assert是仅在debug版本起作用的宏,用于检查“不应该“发生的情况。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。
??15.为什么在头文件的最前面都会看到这样的代码:
??#ifndef _STDIO_H_
??#define _STDIO_H_


头文件中的#ifndef一般格式是这样的#ifndef <标识> ,#define <标识>;<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h


#ifndef _STDIO_H_
#define _STDIO_H_
??16.为什么数组名作为参数,会改变数组的内容,而其它类型如int却不会改变变量的值?
??答:当数组名作为参数时,传递的实际上是地址。而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。
??1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。
??2.写一个函数,将其中的\t都转换成4个空格。
??  3.Windows程序的入口是哪里?写出Windows消息机制的流程。
??  4.如何定义和实现一个类的成员函数为回调函数?
??  5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。
??  6.C++里面如何声明const void f(void)函数为C程序中的库函数?
??  7.下列哪两个是等同的
??  int b;
??  A const int* a = &b;
??  B const* int a = &b;
??  C const int* const a = &b;
??  D int const* const a = &b;
??  8.内联函数在编译时是否做参数类型检查?
??  void g(base & b){
??   b.play;
??  }
??  void main(){
??   son s;
??   g(s);
??   return;
??  }
??3、WinMain
?? while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
?? {
?? if (bRet == -1)
?? {
?? // handle the error and possibly exit
?? }
?? else
?? {
?? TranslateMessage(&msg);
?? DispatchMessage(&msg);
?? }
?? }



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇.net面试题 下一篇给经验不足.net软件面试童鞋们的t..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: