您的位置:首页 > 职场人生

中兴软件开发面试

2015-09-13 11:11 447 查看
中兴软开面试:

一进去,先自我介绍,

然后问了下 什么C语言const,与c++的区别:

答::C语言是变量,C++const常量,在C++里面用这个在常量存储区。

为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?      const int n = 5;int a
;

这样会出错,而在C++中不会出错。

C++可以方便常量进行标识。

这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5,
“abc”,等,肯定是只读的,因为程序中根本没有地方存放它的值,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不 过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为 只读变量,可惜再怎么修饰也不是常量。而ANSI
C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。   

c++中的const:跟c中比较,内容要丰富很多,当然,作用也更大了
1:非类成员const
*在c++中,const变量(在这里涉及的const都不是类中的const,类中的const专门提出来记录)默认是内部连接的,因此在不同的编译单元中可以有同名的const 变量定义。
*是编译时常量,因此可以像#define一样使用,而且因为上面一点,可以在头文件中定义const变量,包含的不同的cpp文件(编译单元)中使用而不引起命名冲突。
*编译器默认不为const变量分配内存,除非:1. 使用 extern 申明, 2:程序中有引用const 变量的地址。
* 可以使用下面的类型转换(不安全的): 1: int * = (int *)pConst  2: int * = const_cast<int*>pConst(c++解const属性cast)
* 函数参数或者返回值能使用 const & or const * 时,尽量使用const属性,增强程序健全性。
*c++中临时对象/内置变量默认具有const属性
2:类中的const
*类中的const与c语言中的const一样,只是运行时常量,不能作为数组维数使用,即不能取代#define。在类中使用下面两种方式取代#define: 1:static const...  2: enum{....}//enum 不占存储空间
*类中的const 变量占用存储空间
*类中的const成员变量需要在构造函数初始化列表中初始化
*const 对象:在该对象生命周期内,必须保证没有任何成员变量被改变。const对象只能调用const成员函数。
*const成员函数: void fun() const ... 不仅能被const对象调用,也能被非const对象调用,因此,如果确认一个任何成员函数不改变任何成员变量,应该习惯性将该函数定义成const类型。 如果const成员函数需要改变成员变量,有两种实现方式: 1 ,const_cast<class*> this强制取消this指针的const属性。 2:将被改变的成员变量定义成mutable:mutable int i; //应永远只使用第二种方法,让任何阅读程序的人都知道该变量可能被const函数改变。
*如果一个对象被定义成const,那么该const对象“可能”会被放入到ROM当中,这在嵌入式开发当中有时非常重要。。。。(不能有任何自定义的constructor 和destructor。它的基类或者成员对象不能有自定义的constructor和destructor,不能有任何mutable成员变量)

问题二 什么是完全二叉树,什么是满二叉树:

满二叉树, 深度是k,有2^k-1个节点。

完全二叉树,是满二叉树从右到左减少几个节点。(面试的时候,可以画图给他看看)

还有其他的,都是根据项目问的,转自同学。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: