c/c++ 常见问题(一)

1、 链表和数组有什么区别

  1. 存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间, 长度可变,每个结点要保存相邻结点指针。
  2. 数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点, 效率低。
  3. 数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。
  4. 越界问题:链表不存在越界问题,数组有越界问题。

  在选择数组或链表数据结构时,一定要根据实际需要进行选择。数组便于查询,链表便于插 入删除。数组节省空间但是长度固定,链表虽然变长但是占了更多的存储空间。

 

2、 面向对象的三大特征

  1. 封装性:将客观事物抽象成类,每个类对自身的数据和方法实行 protection (private , protected , public )。
  2. 继承性:广义的继承有三种实现形式:实现继承(使用基类的属性和方法而无需额外编码的能力)、可 视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。
  3. 多态性:是将父类对象设置成为和一个或更多它的子对象相等的技术。用子类对象给父类对象赋值 之后,父类对象就可以根据当前赋值给它的子对象的特性以不同的方式运作

3、 C++中类成员的访问权限

C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员

4、 请你来说一下C++中struct和class的区别

         在C++中,class和struct做类型定义是只有两点区别:

  1. 默认继承权限不同,class继承默认是private继承,而struct默认是public继承
  2. class还可用于定义模板参数,像typename,但是关键字struct不能同于定义模板参数 C++保留struct关键字,原因
  3. 保证与C语言的向下兼容性,C++必须提供一个struct
  4. C++中的struct定义必须百分百地保证与C语言中的struct的向下兼容性,把C++中的最基本的对象单元规定为class而不是struct,就是为了避免各种兼容性要求的限制
  5. 对struct定义的扩展使C语言的代码能够更容易的被移植到C++中

5、 new/delete与malloc/free的区别是什么

  1. new能自动计算需要分配的内存空间,而malloc需要手工计算字节数。
  2. new与delete直接带具体类型的指针,malloc和free返回void类型的指针。
  3. new类型是安全的,而malloc不是。例如int *p = new float[2];就会报错;而int p = malloc(2sizeof(int))编译时编译器就无法指出错误来。
  4. new一般分为两步:new操作和构造。new操作对应与malloc,但new操作可以重载,可以自定义内存分配策略,不做内存分配,甚至分配到非内存设备上,而malloc不行。
  5. new调用构造函数,malloc不能;delete调用析构函数,而free不能。
  6. malloc/free需要库文件stdlib.h的支持,new/delete则不需要!
int *p = new int[2];

int *q = (int *)malloc(2*sizeof(int));

delete和free被调用后,内存不会立即回收,指针也不会指向空,delete或free仅仅是告诉操作系统,这一块内存被释放了,可以用作其他用途。但是由于没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化,出现野指针的情况。因此,释放完内存后,应该讲该指针指向NULL

 

c/c++ 常见问题(一)

上一篇:QT多线程使用


下一篇:Spring源码解析之ConfigurationClassPostProcessor(一)