c++一些面试题目
1、What is achieved by prefixing the 'static' keyword to a file-level function or file-level variable declaration?
使用static关键字修饰文件级的函数和变量起到什么作用?
key:对变量来说,不允许文件外的程序访问;对函数来说,该函数的实现必须在这个文件内完成,并且不允许文件外的程序调用。
2、Describe the difference between the “IS A” and “HAS A” object relationships. Which is the stronger relationship and why?
IS A在编译期就决定了对象的行为,但是HAS A可以在运行的时候改变"A"所指向的对象,从而可以在运行时改变其行为;
HAS A可以有IS A提供的所有特性(至于访问权限,如果需要,可以赋予friend的关系)
3、Java & C# support interfaces directly with the “interface” keyword.
C++ does not have an “interface” keyword.
How do you create an interface in C++?
Where/when is the use of interfaces especially helpful?
C++ uses pure virtual class to emulate interfaces.
4、If a program requires a large number of execution contexts, what can be done to minimise thread scheduling overhead?
题目意思是:如果一个程序需要巨大的运行上下文,怎样来最小化线程调度的开销?
我不知道怎么回答,如果你知道,能告诉我么?
5、What does it mean to say that a function is reentrant?
What are some of the ways of achieving re-entrancy?
函数可重入是指无论什么时候,对于输入相同的参数,得到的结果都一致。
要使函数可重入,就要避免在函数中使用静态变量,全局变量(在这里是广义的全局变量,包括全局变量,类的静态变量,以及类的数据成员)
如果要在多线程环境下也保证re-entrancy的话,还需要安装互斥锁。
6、抛出异常和返回错误值有什么不同?什么时候得处理抛出异常?
有些情况下必须作异常处理,如程序出现除0的情况,如果不作异常处理的话程序就出现运行时错误。
7、函数参数声明为引用的好处
不需要创建临时变量,创建一个临时变量会增加开销。
8、异常处理的catch里边能不能再抛出异常?
能,这种抛出称为“重抛出”(rethrow),异常将由更外边一层异常处理程序来处理。
9、析构函数是否允许抛出异常?
允许,但这样的话析构函数的执行就在throw处结束,这样析构可能就不完整。
如果实在要使用throw(),那么在析构函数内用catch()处理所有的异常可认为是安全的。
10、构造函数是否允许为虚函数?析构函数呢?
构造函数不允许为虚函数,析构函数可以。
看这种情况:
BaseClass *p = new DerivedClass();
delete p;
如果基类析构函数不为virtual,那么只会调用基类的析构函数,子类的析构函数是不被调用的,所以一般来说我们要把基类的析构函数声明为virtual。
11、什么是多态,如何实现?
经常问的问题,但有时候太紧张思维受阻,还真回答不出来……
其实如果要咬文嚼字的话:“多态(polymorphism)是一种将不同的特殊行为和单个泛化记号相关联的能力”。
回答:
通过虚函数和模版来实现,前者是动态多态,后者是静态多态。
12、什么是虚基类?
其实不应该这样问的,不过我也是碰到这个问题之后才了解到“虚继承”,回答:
被子类虚继承的基类称为虚基类。(e……虚基类和一般的类毫无分别,只是被别人“虚继承”就称为虚基类了,可恶,哪有这样定义的?但他硬是这么问)
虚继承所能达到的目的是:无论继承了多少个基类的实例,只存在一份基类的共享实例,通常用于多重继承(又是很少用的东西,我只建过接口的实现用多重继承,接口接口,该死的Java,该死的面向对象),它可以避免基类实例重复出现而引起的冲突。
13、阐述一下iostream
对“iostream”来说:
cin 是 istream类的对象,istream类 来自 basic_istream模版
cout 是 ostream类的对象,ostream类 来自 basic_ostream模版
cerr 同 cout
对“iostream.h”来说:
没有使用模版,
cin 是 ostream_withassign类的对象,ostream_withassign是istream的子类,istream虚继承于ios类(ios类就是根了)
cout 是 ostream_withassign类的对象,ostream_withassign是ostream的子类,ostream虚继承于ios类
cerr 同 cout
14、阐述STL(复习下STL)
……
15、用聚合还是继承
和第二题差不多
16、函数指针的声明
typedef int (*FUN)(int, int);
FUN fp;
也可以直接定义一个叫fp的函数指针:
int (*fp)(int, int);
typedef int (*FUN)(int, int);
FUN fp[10]; //函数指针数组
或
int (*fp[10])(int, int);
17、关于const
const int a = 10; //a恒为10
int const a = 10; //(同上)
const int *a = &b; //a指向的数为恒值,但a可变
int * const a = &b; //a的值不可变,a指向的值可变
//可能你已经想到了,要使得a及*a的值都不可变:
int const * const a = &b;
18、关于volatile
这个问题我还真的遇到了,并且我几乎答不出,我只说了,这是跟硬件比较相关的一个概念……
如果没做过嵌入式开发的话是不会使用到这个关键字的。当一个变量被定义为volatile的时候,这个关键字告诉优化器,改变量的值可能会不经意地改变,每次使用到该变量的值,都必须重新获取。
19、++的细节
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
C是错误的表达式,因为“=”左边不是一个有效值。
20、extern "C"的作用
一般都能回答,但标准的答案是:
函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
21、关于类型安全
……
22、简述Windows线程同步的几个方法
1)关键代码段,InitializeCriticalSection(),EnterCriticalSection(),LeaveCriticalSection(),不能跨越进程,速度很快,又称为用户方式同步。
2)除了用户方式同步就是内核对象同步了。WaitForSingleObject(),WaitForMultiObject()……
注意:如果是一个线程对象,它处于“有信号”的时候说明它“可调度”,比如它结束了。
2-1)事件Event:CreateEvent(),SetEvent(),ResetEvent(),注意:Event对象可以设置为自动,那么Wait之后它会自动转变为无信号。
2-2)信标Semaphore:CreateSemaphore(),ReleaseSemaphore(),WaitForSingleObject(smph)的时候Count--,ReleaseSemaphore(smph)的时候Count++。
2-3)互斥体Mutex:CreateMutex(),ReleaseMutex(),和信标类似,但没有“资源计数”这一概念。
23、进程间通信
1)Windows消息
2)共享内存,用CreateFileMapping()或者dll
3)网络
4)命名管道
5)邮槽
24、函数参数传递中,数组参数将退化为指针
这点经常考,千万注意
25、程序分析
void getmemory(char *p)
{
p=(char *)malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str);
return 0;
}
这段程序是不能正常打印出“hello world”的,因为指针的值不能正常返回,如果要正确返回指针的值,那么请使用指针的指针,或者引用。
void getmemory(char* & p)
{
p=(char *)malloc(100);
strcpy(p,"hello world");
}
这样就OK了。
c++一些面试题目的更多相关文章
- HTML/CS3相关面试题目
一.HTML/CS3基本面试题目. 1. 常用那几种浏览器测试? 1.1浏览器:IE,Chrome(谷歌),FireFox(火狐),Safari(苹果计算机的最新操作系统Mac OS X中的浏览器,使 ...
- PHP面试题目搜集
搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...
- 总结CSS面试题目的考察点及常见布局问题整理
整理网上流传的若干份面试题目,突发奇想,总结关于CSS面试题目的考察点,发现问题大多围绕几个属性和几种题目,水平有限,仅供参考. 写这个博文内心有种莫名奇妙的自我谴责感,实在不应该把面试层叠样式“应试 ...
- 【转】asp.net c# 网上搜集面试题目大全(附答案)
asp.net c# 网上搜集面试题目大全(附答案) http://www.cnblogs.com/hndy/articles/2234188.html
- 2016年Web前端面试题目汇总
转载: 2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢 ...
- 33条C#、.Net经典面试题目及答案
33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如".NET中类和结构的区别"."ASP.NET页面之间传递值的几种方式? ...
- 33条C#、.Net经典面试题目及答案[zt]
33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如“.NET中类和结构的区别”.“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希 ...
- C/C++ 笔试、面试题目大汇总 转
C/C++ 笔试.面试题目大汇总 这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 1.求下面函数的返回值( ...
- Android面试题目及其答案
转自:http://blog.csdn.net/wwj_748/article/details/8868640 Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应 ...
- POPTEST学员就业面试题目!!!!!
POPTEST学员就业面试题目!!!!! poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.(欢迎大家咨询软件测试工程师就业培训 ...
随机推荐
- 对Qt for Android的评价(很全面,基本已经没有问题了,网易战网客户端就是Qt quick写的),可以重用QT积累20年的RTL是好事,QML效率是HTML5的5倍
现在Qt不要光看跨平台了,Qt也有能力和原生应用进行较量的.可以直接去Qt官网查看他和那些厂商合作.关于和Java的比较,框架和Java进行比较似乎不且实际.如果是C++和Java比较,网上有很多文章 ...
- C# GC 垃圾回收
一.托管 .Net所指的托管资源到底是什么意思呢?是相对于所有资源,还是只限于某一方面的资源?很多人对此不是很了解. 其实.Net所指的托管只是针对内存这一个方面,并不是对于所有的元素:因此对于Str ...
- g++ error: expected ‘)’ before ‘*’ token
原本*号前面的类型是我用typedef自定义的类型的,MyType* const p: 发生这样的错误是,编译器根本不知道MyType是什么东西,这是我在C++多重继承中遇到的.MyType是我在基类 ...
- Android学习总结——Content Provider
原文地址:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Content Provider内容提供者 : and ...
- poj 2774 最长公共子--弦hash或后缀数组或后缀自己主动机
http://poj.org/problem?id=2774 我想看看这里的后缀数组:http://blog.csdn.net/u011026968/article/details/22801015 ...
- Swift中NSData与NSDictionary之间的相互转换
原创Blog,转载请注明出处 使用NSKeyedUnarchiver类来进行相互转换 1.NSDictionary转NSData var dictionaryExample : [String:Any ...
- C#整理8——结构体
结构体:相当于是我们自己定义的一种复杂的类型.int... double float bool char string DateTime 数组类型生活中大部份的对象都是复合型的对象. 如何定义结构体类 ...
- WinForm实现窗体最小化后小图标在右边任务栏下
一 基本功能1. 首先新建一个窗体,然后拖入一个名为 NotifyIcon 的控件,名字我没有改,就那个名字 2. 我的应用程序下有些图标文件,这里我用这个图标,我选择 013.ico 3. 选择 ...
- 网页嵌入WMP代码(转)
网页嵌入WMP代码 播放器代码解释,装了9.0或9.0以上的播放器才能正常使用: OBJECT id="WMP" height="176" width=&quo ...
- JavaScript 原型链的一点想法
JavaScript借鉴了许多语言的特点:例如语法类Java.函数借鉴Scheme.原型继承借鉴自Self.正则表达式借鉴于Perl.(DC Javascript:语言精粹). 首先,每个J ...