近期出现的C++面试题整理(附详细答案)汇编

上传人:我** 文档编号:113811617 上传时间:2019-11-09 格式:DOCX 页数:57 大小:50.13KB
返回 下载 相关 举报
近期出现的C++面试题整理(附详细答案)汇编_第1页
第1页 / 共57页
近期出现的C++面试题整理(附详细答案)汇编_第2页
第2页 / 共57页
近期出现的C++面试题整理(附详细答案)汇编_第3页
第3页 / 共57页
近期出现的C++面试题整理(附详细答案)汇编_第4页
第4页 / 共57页
近期出现的C++面试题整理(附详细答案)汇编_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《近期出现的C++面试题整理(附详细答案)汇编》由会员分享,可在线阅读,更多相关《近期出现的C++面试题整理(附详细答案)汇编(57页珍藏版)》请在金锄头文库上搜索。

1、第一部分:简答题1.一下C+中static_cast和dynamic_cast的区别。答:static_cast用于有比较明确定义的变换,包括不需要强制转换的变换。dynamic_cast适用于类型安全的向下转换,常用在继承中的父类指针向子类指针的转换。若转换成功则返回改类型的指针,若失败,则返回NULL。1. Struct和class的区别。答:struct是一种结构体类型的标志,它和C+中的Class很相似。C+中两者的唯一区别在于:Class定义中默认情况下的成员都是私有的,而结构Struct定义中默认情况下的成员都是公有的。在C中,结构中不能有成员函数,而在C+中可以有成员函数.1.

2、是不是一个父类写了一个virtual函数,如果子类覆盖它的函数不加virtual,也能实现多态?答:virtual修饰符会被隐形继承的。private也被继承,只是派生类没有访问权限而已。virtual可加可不加。子类的空间里有父类的所有变量(static除外)。同一个函数只存在一个实体(inline除外)。子类覆盖它的函数不加virtual,也能实现多态。在子类的空间里,有父类的私有变量。私有变量不能直接访问。1. C和C+有什么不同?(从机制,适用领域等方面说说)答:从机制上:C是面向过程的(但c也可以编写面向对象的程序);C+是面向对象的,提供了类。但是,C+编写面向对象的程序比C容易从

3、适用的方向:C适合要求代码体积小的,效率高的场合,如嵌入式;C+适合更上层的,复杂的;llinux核心大部分是C写的,因为它是系统软件,效率要求极高。从名称上也可以看出,C+比C多了+,说明C+是c的超集;那为什么不叫C+而叫C+呢,是因为C+比C来说扩充的东西太多了,所以就在C后面放上两个+;于是就成了c+C语言是结构化编程语言,C+是面向对象编程语言。C+侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。1. 请说出const与#define相比,有何优点?答:1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查

4、,并且在字符替换可能会产生意料不到的错误。2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。1. 简述数组与指针的区别?答:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。(1)修改内容上的差别chara=“hello”;a0=X;char*p=“world”;/注意p指向常量字符串p0=X;/编译器不能发现该错误,运行时错误(2)用运算符sizeof可以计算出数组的容量(字节数)。sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量。C+/C语言没有办法知道指针所指的内存容量,除非在申请内

5、存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。chara=“helloworld”;char*p=a;coutsizeof(a)endl;/12字节coutsizeof(p)endl;/4字节计算数组和指针的内存容量voidFunc(chara100)coutsizeof(a)接口继承以及纯虚函数)构成了功能复用的两种方式。3.多态:是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。9.请简单描述Windows内存管理的方法。

6、答:内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧我先说个大概,希望能够抛砖引玉吧当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存(物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算程序片段在主存中的物理位置,以便CPU调度。内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块

7、主存空间,把程序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50的内存空间,但时易于管理。页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都知道是I/O吧)。段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干

8、段。好处就很明显,不用我多说了吧。各种内存管理都有它自己的方法来计算出程序片断在主存中的物理地址,其实都很相似。这只是一个大概而已,不足以说明内存管理的皮毛。无论哪一本操作系统书上都有详细的讲解10.main主函数执行完毕后,是否可能会再执行一段代码,给出说明?答:可以,可以用_onexit注册一个函数,它会在main之后执行intfn1(void),fn2(void),fn3(void),fn4(void);voidmain(void)Stringstr(“zhanglin”);_onexit(fn1);_onexit(fn2);_onexit(fn3);_onexit(fn4);print

9、f(“Thisisexecutedfirst.n”);intfn1()printf(“next.n”);return0;intfn2()printf(“executed”);return0;intfn3()printf(“is”);return0;intfn4()printf(“This”);return0;Csdn文档摘要:The_onexitfunctionispassedtheaddressofafunction(func)tobecalledwhentheprogramterminatesnormally.Successivecallsto_onexitcreatearegistero

10、ffunctionsthatareexecutedinLIFO(last-in-first-out)order.Thefunctionspassedto_onexitcannottakeparameters.11.const符号常量;(1)constchar*p(2)charconst*p(3)char*constp说明上面三种描述的区别.答:如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。(1)constchar*p一个指向char类型的const对象指针,p不是常量,我们可

11、以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如:constchar*p;charc1=a;charc2=b;p=&c1;/okp=&c2;/ok*p=c1;/error(3)char*constp此时*p可以修改,而p不能修改。(4)constchar*constp这种是地址及指向对象都不能修改。12.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?答:intn;if(n=10)/第一种判断方式if(10=n)/第二种判断方式如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=13.*p+自增p还是p所指向的变量?答:后缀+和操作符

12、本质上比前缀一目操作的优先级高,因此*p+和*(p+)等价,它自增p并返回p自增之前所指向的值。要自增p指向的值,使用(*p)+,如果副作用的顺序无关紧要也可以使用+*p。14.#pragma是什么,有什么用?答:#pragam指令提供了一种单一的明确定义的“救生舱”,可以用作各种(不可移植的)实现相关的控制和扩展:源码表控制、结构压缩、警告去除(就像lint的老/*NOTREACHED*/注释),等等。15.“#pragmaonce”是什么意思?我在一些头文件中看到了它。答:这是某些预处理器实现的扩展用于使头文件自我识别;它跟#ifndef技巧等价,不过移植性差些。16.进程间通信的方式有?答:进程间通信的方式有共享内存,管道,Socket,消息队列,DDE等17.如何打印出当前源文件的文件名以及源文件的当前行号?答:cout_FILE_;cout_LINE_;_FILE_和_LINE_是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。18.如何

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号