经典c++面试题库

  1. C++的类和C里面的struct有什么区别?

  struct成员默认访问权限为public,而class成员默认访问权限为private

  2. 析构函数和虚函数的用法和作用

  析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。

  虚函数是指被关键字virtual说明的函数,作用是使用C++语言的多态特性

  3. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

  1) 全局变量的作用用这个程序块,而局部变量作用于当前函数

  2) 前者在内存中分配在全局数据区,后者分配在栈区

  3) 生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在

  4) 使用方式不同:通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用

  4. 有N个大小不等的自然数(1–N),请将它们由小到大排序.要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。

  void sort(int e[], int n)

  {

  int i;

  int t;

  for (i=1; i {

  t = e[e[i]];

  e[e[i]] = e[i];

  e[i] = t;

  }

  }

  5. 堆与栈的去区别

  A. 申请方式不同

  Stack由系统自动分配,而heap需要程序员自己申请,并指明大小。

  B. 申请后系统的响应不同

  Stack:只要栈的剩余空间大于申请空间,系统就为程序提供内存,否则将抛出栈溢出异常

  Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存地址的链表,寻找第一个大于所申请空间的堆结点,然后将该结点从空间结点链表中删 除,并将该结点的空间分配给程序。另外,大多数系统还会在这块内存空间中的首地址处记录本次分配的大小,以便于delete语句正确释放空间。而且,由于 找到的堆结点的大小不一定正好等于申请的大小,系统会自动将多余的那部分重新放入空闲链表。

  

本文已影响6827
上一篇:Java软件工程师综合面试笔试题 下一篇:.NET概念性的面试题目

相关文章推荐

|||||