代码改变世界

C++笔试、面试题总结

2014-05-11 22:36  guocm  阅读(265)  评论(0编辑  收藏  举报

1、static有什么用途

  静态局部变量,静态局部变量的生存期为整个源程序,但是只在定义它的函数体内起作用,若有多个函数体同时用到了此变量,再次调用时会保留前次留下的值。(设置变量的存储域)

  静态全局变量,静态全局变量的作用域是当前源文件,而非静态全局变量的作用域是整个源程序。(限制变量的作用域)

  静态函数,用static声明的函数为静态函数,也称内部函数,静态函数的作用域为当前文件,程序中,默认为外部函数(即extern文),静态函数需显示定义。(限制函数的作用域)

  类静态成员函数,不属于该类申请的任何一个对象,而是所有该类成员共同共有的一个函数,没有this指针,只能访问静态数据成员。(限制函数的访问域)。

2、引用和指针有什么区别?

  引用是一段存储空间的别名。而指针需要分配自身空间,其自身是指向某段内存空间的地址。

  引用必须被初始化,而且初始化之后不可更改。

3、堆栈溢出是由什么造成的?

  没有回收垃圾

  层次太深的递归调用。

4、C++中什么函数不能被声明为虚函数?

  普通函数、内联函数、构造函数、静态成员函数、友元函数。

5、继承层次中,为什么基类析构函数是虚函数?

  当用基类类型的指针指向派生类对象时,如果基类析构函数不是虚函数,则用释放指针时,只调用基类的析构函数,派生类的析构函数无法调用,就会造成内存溢出。但是如果声明为虚函数,则释放指针时,先调用派生类的析构函数,再回调基类的析构函数。

6、为什么构造函数不能是虚函数?

  从实现上来看,虚表是在建立构造函数之后,建立的,故不能将构造函数设置为虚函数。

  从内存上来看,虚函数表其实是存储在对象的内存空间的,如果构造函数是虚的,就需要通过vtable来调用,可是对象空间还没有分配,无法找到vtable,所以构造函数不能是虚函数。

7、公有继承、受保护继承、私有继承

  公有继承,派生类对象可以访问基类中的公有成员,派生类的成员函数可以访问基类中的公有和受保护成员,基类受保护的成员,可以通过派生类对象访问但不能修改。

  私有继承,基类的成员只能被直接派生类的成员访问,无法再往下继承;

  受保护继承时,基类的成员也只能被直接派生类的成员访问,无法再往下继承。

8、有哪几种情况只能用构造函数初始化列表而不能用赋值初始化?

  const和引用成员变量。赋值是删除原值、赋予新值,而构造函数是先分配空间、再赋值,const和引用一经定义不能改变,所以不能被赋值,只能被初始化。

9、C++如何阻止一个类被实例化?一般在什么时候将构造函数声明为private

  第一个问题:1)将类定义为抽象类;2)将构造函数声明为private;

  第二个问题:不允许类外创建类对象,只能在类内部创建对象;

10、进程和线程的区别?

 

  进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  进程中所包含的一个或多个执行单元称为线程(thread)。线程只能归属于一个进程并且它只能访问该进程所拥有的资源。

11、进程间如何通信?