近期看一些面试题,认为假设自己被问到了,并不能非常利落的回答出来。

一是从来没有这个意识,二是没有认真的梳理下。

以下对这些题做出分析,哈!个人能力有限,当中难免有疏漏,欢迎大家补充咯。

11.引用与指针有什么差别?

【參考答案】  

1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针能够改变所指的对象。

3) 不存在指向空值的引用。可是存在指向空值的指针。





能够參考下 在 5 题中补充的内容









12.C++中virtual与inline的含义各自是什么?

【參考答案】

在基类成员函数的声明前加上virtualkeyword,意味着将该成员函数声明为虚函数。

inline与函数的定义体放在一起,使该函数称为内联。

inline是一种用于实现的keyword,而不是用于声明的keyword。 

虚函数的特点。假设希望派生类可以又一次定义基类的方法。则在基类中将该方法定义为虚方法。这样可以启用动态联编。 

内联函数的特点。使用内联函数的目的是为了提高函数的执行效率。内联函数体的代码不能过长,由于内联函数省去调用函数的时间是以代码膨胀为代价的。内联函数不能包括循环语句。由于执行循环语句要比调用函数的开销大。





哈。我想我确实要注意一下表达能力。。

13.

VC中。编译工具条内的Debug与Release选项是什么含义?

【參考答案】

Debug 通常称为调试版本号,它包括调试信息。而且不作不论什么优化。便于程序猿调试程序。

Release 称为公布版本号。它往往是进行了各种优化,使得程序在代码大小和执行速度上都是最优的。以便用户非常好地使用。





Debug带有大量的调试代码。执行时须要对应的执行库,

公布模式程序紧凑不含有调试代码和信息,直接能够执行(假设不须要执行库)









14.函数assert的使用方法?

【參考答案】断言assert是仅在debug版本号起作用的宏,用于检查“不应该“发生的情况。程序猿能够把assert看成一个在不论什么系统状态下都能够安全使用的无害測试手段





学VC++的时候见过assert宏定义。可是自己从来没用过。。。









15.const  与 #define 的比較 。const有什么长处?

【參考答案】

(1) const 常量有数据类型,而宏常量没有数据类型。

编译器能够对前者进行类型安全检查。而对后者仅仅进行字符替换,没有类型安全检查,而且在字符替换可能会产生意料不到的错误(边际效应) 。 

#define不能生成 类的专属常量,由于它仅仅是进行简单的替换。。

(2)  有些集成化的调试工具能够对 const 常量进行调试,可是不能对宏常量进行调试。





《Effective C++》中建议以const、enum、inline取代#define。

使用enum的原因

有些情况下,编译器不同意静态常量出如今类的初始设定中,仅仅得以enum的形式

还有一方面,enum和#define更相似,它们都没有详细的类型,比方,有const int a; 却没有 #define N int a,enum和#define都不可以被去地址,而const可以。









16.请你谈谈引用和指针的差别。

【參考答案】

(1)引用被创建的同一时候必须被初始化(指针则能够在不论什么时候被初始化) 。 

(2)不能有 NULL 引用,引用必须与合法的存储单元关联(指针则能够是 NULL) 。 

(3)一旦引用被初始化,就不能改变引用的关系(指针则能够随时改变所指的对象) 。





不断地出现。可见这个问题是常常easy被问到的。









17.

有了 malloc/free 为什么还要 new/delete  ?

【參考答案】

malloc 与 free 是 C++/C 语言的标准库函数。new/delete 是 C++的运算符。

它们都可用于申请动态内存和释放内存。

 对于非内部数据类型的对象而言,光用 malloc/free 无法满足动态对象的要求。

对象在创建的同一时候要自己主动运行构造函数,对象在消亡之前要自己主动运行析构函数。

因为malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不可以把运行构造函数和析构函数的任务强加于 malloc/free。 

因此 C++语言须要一个能完毕动态内存分配和初始化工作的运算符 new,以及一个能完毕清理与释放内存工作的运算符 delete。注意 new/delete 不是库函数。





曾经仅仅是习惯在用C时用malloc/free,用C++时用new/delete。没注意到这些差异性。









18.假设在申请动态内存时找不到足够大的内存块,malloc 和 new 将返回 NULL 指针,宣告内存申请失败。

你是怎么处理内存耗尽的?

【參考答案】

(1)推断指针是否为 NULL。假设是则立即用 return 语句终止本函数。

(2)推断指针是否为 NULL,假设是则立即用 exit(1)终止整个程序的执行 

(3)为 new 和 malloc 设置异常处理函数。

比如 Visual C++能够用_set_new_hander 函数为 new 设置用户自定义的异常处理函数,也能够让 malloc 享用与 new 同样的异常处理函数。





我通常是直接return 了









19.C++是不是类型安全的?

【參考答案】不是。

两个不同类型的指针之间能够强制转换(用reinterpret cast)。

20. const 符号常量;

(1)const char *p

(2)char const *p (

3)char * const p

说明上面三种描写叙述的差别。

【參考答案】

(1)p是一个指向const char的指针,p是能够改变指向的。可是p指向的值是不能改变的;        

(2)p指向的恰好是一个指向const的char的普通指针。

(3)p是一个指针,这个指针是指向char的const指针。

(1)和(2)的定义是一样的。





1、2和3的差别在于。1和2的const出如今*号左边,3出如今*号右边。好像也是在《C和指针》上看到的这句话。

未完。。

。待续(*^_v_^*)

C++经典面试题(二)的更多相关文章

  1. 经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯

    1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项, 例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12 (1).设计一个函数void ...

  2. JavaScript经典面试题(二)

    前言: 近年来T行业就业者越来越多,有关于编程行业的高薪工作也变得越来越难找,竞争力越来越大,想要在众多的应聘者当中脱颖而出,面试题和笔试题一定要多加研究和琢磨,以下记录的是自己的面试过程之中遇到的一 ...

  3. Web前端经典面试试题(二)

    上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...

  4. 李洪强iOS经典面试题156 - Runtime详解(面试必备)

    李洪强iOS经典面试题156 - Runtime详解(面试必备)   一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...

  5. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  6. 李洪强iOS经典面试题143-绘图与动画

    李洪强iOS经典面试题143-绘图与动画   绘图与动画 CAAnimation的层级结构 CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使 ...

  7. 李洪强iOS经典面试题140-UI

    李洪强iOS经典面试题140-UI   UI viewcontroller的一些方法的说明viewDidLoad,viewWillDisappear, viewWillAppear方法的 顺序和作用? ...

  8. 李洪强iOS经典面试题139-Swift

    李洪强iOS经典面试题139-Swift Swift 网上有很多Swift的语法题,但是Swift现在语法还未稳定,所以在这里暂时不贴出语法题,可以自行搜索. Swift和Objective-C的联系 ...

  9. 李洪强iOS经典面试题下

    李洪强iOS经典面试题下 21. 下面的代码输出什么? @implementation Son : Father - (id)init { self = [super init]; if (self) ...

随机推荐

  1. WebBrowser脚本错误的完美解决方案

    原文:WebBrowser脚本错误的完美解决方案   当IE浏览器遇到脚本错误时浏览器,左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框.当我们使用WebBrowse ...

  2. 枚举算法总结 coming~^.*

    感谢CJ同学监督╭(╯^╰)╮.从放假到现在都木有更新博客了~噶呜~小娘谨记教诲,每天会更新博客==!! 看了一下POJ训练计划,虽然已经零零散散做了40多道题了,还是从头开始整理一下漏掉的知识点.T ...

  3. Mac与Window之间的共享文件

    Mac访问Window: Finder 菜单 “前往” ,然后“连接服务器”,在服务器地址输入 smb://windows主机名或ip地址/共享名(前提window已设置共享文件) Windows访问 ...

  4. Spring4 MVC 多文件上传(图片并展示)

    开始需要在pom.xml加入几个jar,分别是 <dependency> <groupId>commons-fileupload</groupId> <art ...

  5. HttpClient使用详解

    http://itindex.net/detail/52566-httpclient HttpClient使用详解 标签: httpclient | 发表时间:2015-01-22 12:07 | 作 ...

  6. PAT 1055

    题目链接:https://www.patest.cn/contests/pat-b-practise/1055 分析:思路很巧妙,感觉很有意义的字符串题目 #include<bits/stdc+ ...

  7. 简单的 "双缓冲" 绘图的例子(研究一下)

    所谓双缓冲就是先画到内存画布(如: TBitmap), 然后再转帖到目的地. 譬如下面小程序: procedure TForm1.FormCreate(Sender: TObject); begin ...

  8. TForm.ShowModal只是接管消息循环,禁止外部键盘和鼠标输入到别的窗口,但并不封锁其它窗口继续获取消息(比如WM_TIMER消息仍可被发送到别的窗口上)

    窗体上放一个TTimer,然后双击输入: procedure TForm1.Timer1Timer(Sender: TObject); var cvs: TCanvas; Rect: TRect; S ...

  9. Delphi的没落有三个原因(比较贴切)

    Delphi的没落有三个原因:1,Object pascal并没有像C/C++那样成为业内标准. 如果你使用C或C++写程序,可以在任何地方进行编译,例如Windows.Linux.手机,甚至是单片机 ...

  10. Delphi实现窗口一直在桌面工作区内显示(重写WM_WINDOWPOSCHANGING消息)

    有的时候我们要实现一个悬浮窗口,并使该窗口一直显示在桌面的工作区内.即整个窗口要一直显示在屏幕上,不能超出屏幕的上下左右边缘.此功能的实现也不难,我们需要自己写代码来响应窗口的WM_WINDOWPOS ...