面试汇总C++相关

一.static关键字的作用

 

  全局静态变量 局部静态变量 静态函数 类的静态成员 类的静态函数
定义 在全局变量前加上关键字static 在局部变量前加上static 在函数返回类型前加上static,函数只能在声明他的文件中所用 静态成员可以实现多个对象之间的数据共享,静态成员是类的所有对象中共享的成员,而不是某个对象的成员,对多个对象来说,静态数据成员只存储一处,供所有对象共用 静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员
存储区域 静态存储区,在整个程序运行期间一直存在 静态存储区      
初始化 未经初始化的全局静态变量会被自动初始化为0 未经初始化的局部静态变量会被自动初始化为0      
作用域 生命全局变量的本文件内 仍是定义它的函数或语句块

 

   
备注   但当局部静态变量离开作用域后,并没有立即销毁,而是仍然存在内存中,只不过我们不能再对它进行访问,直到函数再次被调用并且值不变 对于其他文件中声明的同名函数不冲突 静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。静态成员的引用不需要用对象名 如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>);

二、C++的四种cast转换

1.static cast:内置基本类型之间的转换,以及子类向基类的转换,基类向子类的转换会出错

2.dynamic cast:基类一定要有虚函数,动态编联,继承类的指针或引用转换,只能向上转换

3.reinterpret_cast:什么都可以转换

4.const_cast 最常用的用途就是删除变量的const属性

三、指针和引用的区别

1.NULL:指针可以是空指针,但引用不可以是空引用,使用指针时需要对其进行判断

2.指向的对象:指针可以改变指向的对象,但是引用不可以

3.++:指针的自加表示指向下一个地址的元素,但引用的自加表示对象值的自增

4.const:指针本身是可以定义为常量指针的,但引用本身不可以。指针和引用都可以指向const对象

5.初始化:指针可以不进行初始化,但引用必须进行初始化

四、const的作用

参考链接:https://blog.csdn.net/Eric_Jo/article/details/4138548

1.防止被更改:用const定义的变量不能被更改,函数的参数被声明为const的时候,可以防止他们被更改

2.区别于define:用const定义的变量有数据类型,会对类型安全进行检查,而define只是进行简单的字符替换

3.同宏定义一样,可以很方便的进行修改

4.区别于宏:const存储在符号表中,存储快速,而define会有很多的备份

const用法:

const int a :a本身不能被修改
const int *a :a指向的对象不能被修改
int *const a :a不能改变指向
const int *const a :a的指向和a指向的对象都不能被改变

const修饰的类成员,表示不成员常量,不能被修改只能在初始化列表中赋值

const修饰的成员函数,不能修改类中的任一成员,只有const函数才可以调用对象中的const常量

const修饰的对象或对象指针或对象引用:不能改变其中的任一成员,并且只能调用该类里面的常量函数,因为非常量函数有更改成员变量的可能

五、指针和数组的区别

  指针 数组
存储的内容 地址 数据
访问数据的方式 从地址中提取简介访问数据 通过下标直接访问数据
数据结构 动态数据结构 数组长度固定,类型相同
申请内存的方式 malloc/free,new /delete 隐式申请

六、数组和链表的区别:

数组和链表的区别
  数组 链表
内存 占有连续的内存空间 可以利用内存的碎片化
所占空间的灵活性 空间大小固定,空间利用效率低 动态申请和释放内存
插入/删除 O(N) O(1)
随机访问 O(1) O(N)
扩容 将旧的地址空间的内容复制到新的空间里 一个节点中包含val和指针
  栈分配 堆分配

 

 

你可能感兴趣的:(C++,面试)