c++经典面试题(共30页).docx
《c++经典面试题(共30页).docx》由会员分享,可在线阅读,更多相关《c++经典面试题(共30页).docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上1. C和C+中struct有什么区别?C语言中:Struct是用户自定义数据类型(UDT)C+语言中:Struct是抽象数据类型(ADT),支持成员函数的定义。在C+中,struct的成员的默认访问说明符为public,class为private。c中的struct是没有权限设置的。C+中struct增加了访问权限,且可以和类一样有成员函数。C+中的struct等同于class,只是class默认成员权限是private,而struct默认成员权限是public。1 C+中的struct类似于class,有变量,有构造函数、虚函数等,有继承,多态等类的特征;2 2
2、C中的struct只有变量,不能有函数,但是可以有函数指针2. C+中的struct和class有什么区别?在C+中,两者区别不大,但是有2个主要的区别1. 继承权限:struct默认是public继承;class默认是private继承2. 访问权限:struct默认是public访问;class默认是private访问3.如何判断一段程序是由C 编译程序还是由C+编译程序编译的? 【标准答案】 #ifdef _cplusplus cout“c+; #else cout 部分;2 面向对象部分,包括封装、继承、多态这些C语言所没有的特性;3 泛型编程部分,大多数类、函数要考虑到把它设计成模板
3、,方便复用;4 STL库,里面封装了大量的优秀模板,是 3 中内容的集成, 学会使用它们可以让代码更高效。当然,最好去深入了解STL源码,那样会对C+有更深的理解。5.“引用”与指针的区别是什么?【参考答案】指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。在另一本C+著作More Effective C+里,第一条就是论述 point 和 reference的区别总结一下 ,1 指针是一个存储地址的变量,而引用是一个变量的别名。所以在一个函数中,传引用要比传指针速度更快。2 指针可以指
4、向一个空值,而引用必须初始化。指针可以如下形式出现cpp 1. int*p;是合法但不合理的(相当于是一个野指针)。可以声明一个指向空值的指针cpp 1. int*p=null而引用不行cpp 1. int&r;是错误的引用必须初始化为一个变量的别名,如cpp 1. inta=5;2. int&r=a;3 也是因为 2的特性,指针在使用前要判断是否为空,而引用必定不为空(否则会报错),所以不用判断。4 指针可以更改指向的内存地址,而引用是和变量绑定的,不可更改。5 在运算符重载过程中,通常返回一个引用往往比返回一个指针更好,使用指针易引起语义上的歧义。6.class A virtual voi
5、d func1(); void func2(); ;class B: class Avoid func1()cout fun1 in class B endl; virtual void func2() cout fun2 in class B 65536)3. 4. cout32bitendl;5. 6. else7. 8. cout16bit/2生命周期不同:全局变量随主程序创建而创建,随主程序销毁而销毁;内存中分配在全局数据区。局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 分配在栈区。 使用方式不同:通过声明后全局变量程序的各个部分都可以用到;局部变量只能在局部使用;
6、 3操作系统和编译器通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载。局部变量则分配在堆栈里面 。另,全局变量会被初始化为0,而局部变量以随机值进行初始化31.Heap与stack的差别【参考答案】Heap是堆,stack是栈。 Stack的空间由自动分配/释放,Heap上的空间手动分配/释放。 Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C+中对应的是new操作符。 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行32.In C+, what does explic
7、it mean? what does protected mean?【标准答案】c+中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问。我擦!它俩为啥放在一起问。33.重复多次fclose一个打开过一次的FILE *fp指针会有什么结果,并请解释。【参考答案】考察点:导致文件描述符结构中指针指向
8、的内存被重复释放,进而导致一些不可预期的异常。34.为什么数组名作为参数,会改变数组的内容,而其它类型如int却不会改变变量的值?【参考答案】当数组名作为参数时,传递的实际上是地址。而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。传值与传地址的区别35.你觉得如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?【参考答案】(1) 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。(2) 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。(3) 如果要修
9、改数字或字符串,则会在很多地方改动,既麻烦又容易出错。36.为什么需要使用堆,使用堆空间的原因?【参考答案】直到运行时才知道一个对象需要多少内存空间;不知道对象的生存期到底有多长。因为需要动态分配内存啊。37.const关键字?有哪些作用【参考答案】const关键字至少有下列n个作用:(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;(3)在一个函数声明中,const可以修饰形参,表明它是一个输入
10、参数,在函数内部不能改变其值;(这样既可以利用传地址、传引用的高效特性,又保证了传值的安全性)(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;还记得如果要修改成员变量,应该把成员变量声明为什么吗?mutable!(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。更多更详细的内容,推荐看Effective C+38.、是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?【参考答案】virtual修饰符会被隐形继承的。virtual可加可不加。子类的空间里有父类的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 经典 试题 30
限制150内