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

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

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

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. Delphi的String内存结构(够清楚) good

    变量s的内存结构为(字符串编码)A8 03 (字符宽度)01 00 (引用计数)FF FF FF FF (字符串长度)0A 00 00 00 (实际内容)31 32 33 34 35 36 37 38 ...

  2. hdu 4055 Number String(有点思维的DP)

    Number String Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. JavaScript—DOM操作

  4. ANDROID L——Material Design综合应用(Demo)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Material Design: Material Design是Google推出的一个全 ...

  5. 蜘蛛侠天堂,打死我mac键盘

    今天是周末,在我租住的房间,以一个离奇事件. 一个蜘蛛侠天堂,趴在我的假期车窗玻璃,爬下沿着玻璃.特别糟糕.可以飞檐走壁. 可惜体力不支,摔死在我的mac键盘上. 有图有视频. 视频链接:http:/ ...

  6. 如何下载和编译Android4.0内核源代码goldfish(图像)

    如何下载Android4.0源代码.请参阅我的博客文章中有(同样是图文教程): http://blog.csdn.net/flydream0/article/details/7036156 怎样编译A ...

  7. Delphi过程函数传递参数的八种方式

    今天一同事问我为什么有些过程函数里面有Var而有些没有,不解,遂到网上百度,得解.快哉,快哉. 在Delphi过程.函数中传递参数几个修饰符为Const.Var.Out.另一种不加修饰符的为默认按值传 ...

  8. git merge,rebase和*(no branch)

    上一篇:http://blog.csdn.net/xiaoputao0903/article/details/23933589,说了git的分支,相关的使用方法没说到可是仅仅要google就能搜出一大 ...

  9. oracle 之 内存—鞭辟近里(二)

    overview of the pga pga是在操作系统的进程或是线程特定的一块内存区域,它不是共享的.因为pga是进程指定的,因此它不会在sga中分配. pga是一个内存堆,其中包含了被专用服务器 ...

  10. matlab矩阵的表示和简单操作

    原地址:http://www.cnblogs.com/Ran_Ran/archive/2010/12/11/1903070.html 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必 ...