面试题总结——第1篇 面向对象 指针/引用 new/delete malloc/free

1.对于面向对象的理解

面向对象是基于面向过程的,面向过程强调的是功能的实现,面向对象是吧功能封装进对象,强调具备了功能的对象

eg:餐厅吃饭 吃饭<->点餐 做菜 上菜

三大特性:封装,多态,继承

2.指针和引用的区别

  1. 引用在定义时必须初始化,指针没有要求
  2. 引用在初始化时引用一个实体后,就不能再进行引用其他实体,而指针可以在任何时候指向任何一个同类型实体
  3. 没有NULL引用,但有NULL指针
  4. 在sizeof中含义不同:引用结果为引用类型的大学,但指针始终是地址空间所占字节个数
  5. 引用自加既引用实体增加1,指针自加即指针向后偏移一个类型的大小
  6. 有多级指针,但是没有多级引用
  7. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  8. 引用比指针使用起来相对安全

3.new/delete和malloc/free的区别

  1. maollc/free是函数,new/delete是操作符
  2. new申请的空间可以初始化,malloc不行
  3. malloc的返回值是void*,所以需要计算空间大小并传递且使用时必须更改类型,new不需要
  4. malloc申请失败返回NULL,new需要捕获异常
  5. malloc申请的空间一定在堆上,而new不一定,因为operator new可能会存在重载
  6. new/delete比malloc/free的效率稍微低点,因为new/delete的底层封装了maolloc/free
  7. malloc/free只能申请内置类型的空间,不能申请自定义类型的空间,因为其不会调用构造与析构函数

猜你喜欢

转载自blog.csdn.net/ladykiller21/article/details/89027835