最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。
一是从来没有这个意识,二是没有认真的梳理下。
下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!
31.Heap与stack的差别
【参考答案】
Heap是堆,stack是栈。
Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。
Stack空间有限,Heap是很大的自由存储区
C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行
32.In C++, what does "explicit" mean? what does "protected" mean?
【标准答案】
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。
protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问。
我擦!它俩为啥放在一起问。
33.重复多次fclose一个打开过一次的FILE *fp指针会有什么结果,并请解释。
【参考答案】考察点:导致文件描述符结构中指针指向的内存被重复释放,进而导致一些不可预期的异常。
34.为什么数组名作为参数,会改变数组的内容,而其它类型如int却不会改变变量的值?
【参考答案】当数组名作为参数时,传递的实际上是地址。而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。
传值与传地址的区别
35.你觉得如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?
【参考答案】
(1) 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。
(2) 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。
(3) 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。
36.为什么需要使用堆,使用堆空间的原因?
【参考答案】直到运行时才知道一个对象需要多少内存空间;不知道对象的生存期到底有多长。
因为需要动态分配内存啊。。。
37. const关键字?有哪些作用
【参考答案】const关键字至少有下列n个作用:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(这样既可以利用传地址、传引用的高效特性,又保证了传值的安全性)
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
还记得如果要修改成员变量,应该把成员变量声明为什么吗?mutable!
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
更多更详细的内容,推荐看《Effective C++》
38.、是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?
【参考答案】virtual修饰符会被隐形继承的。virtual可加可不加。子类的空间里有父类的所有变量(static除外)。同一个函数只存在一个实体(inline除外)。子类覆盖它的函数不加virtual ,也能实现多态。在子类的空间里,有父类的私有变量。私有变量不能直接访问。
不过最好是加上,加上表明它是一个虚函数,这样提高了代码的阅读性。
39.面向对象的三个基本特征,并简单叙述之?
【参考答案】
1. 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public)
2. 继承:广义的继承有三种实现形式:
实现继承(指使用基类的属性和方法而无需额外编码的能力)、
可视继承(子窗体使用父窗体的外观和实现代码)、
接口继承(仅使用属性和方法,实现滞后到子类实现)。
前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式。 3. 多态:是将父对象设置成为和一个或更多的与他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
40.重载(overload)、重写(override,有的书也叫做“覆盖”)、重定义(redefinition)的区别?
【标准答案】
未完。。。待续(*^_v_^*)
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u011694809/article/details/46659615