c/c++常见面试题一

╄→гoц情女王★ 提交于 2020-01-29 04:04:13

找工作这么多天了,贴一下常见基础题吧,谁找工作了还可以复习下。答案有的是缺少很多,想看全百度之谷歌之...

1.进程与线程的区别:

  很长重点写了:一个程序必须有一个进程,一个进程要有一个线程。

  进程在运行时有独立的内存单元,而线程则是共享内存单元,所以一个线程死掉这个进程就会死掉,但是一个进程死掉程序无所谓。所以多进程程序比多线程要        稳定。  

2.c++函数传递参数的方式:

  1.直接传递、引用、指针。

  他们的优缺点:

  1.按值传递,在传递的时候实参被复制了一份,然后在函数体内使用。如果修改函数体内的拷贝,而实参是没有改变的。

  2.引用是别名,所以效率别指针快,也比指针安全。(优先使用引用而不使用指针)

  3.按值传递和引用传递在传参过程中,都执行强类型检查,而指针传递的类型比较弱,如果参数被声明为void*基本上没有类型检查,只要是指针编译器就认为是合法的,所以这会造成BUG。

  4.指针可以干引用的活,而且还可以传递空指针,特别函数特别应用。但是指针用起来本身就很麻烦,如非需要还是不用。

*3.什么是深拷贝和浅拷贝

   深拷贝:拷贝了对象的资源,在新对象中又建立了一个新的字段把资源放进去,如果修改其一,另一个不会改变。

   浅拷贝:没有拷贝对象资源,它们共享资源,如果改变其一另一个也会随之改变。

4.面向对象的三个基本特征

  1)封装:将客观事物封装成类,并且赋予private,public,protected.三种模式

  2)继承:三种继承模式:私有、公有、保护

  3)多态:

    实现方法有:虚函数、抽象类、重载、覆盖、模板

  虚函数:被virtual修饰的成员函数就是虚函数啦,但是这个函数不能是static静态成员函数。如果基类的某个函数是虚函数的话,那么子类也是虚函数了,不管              有没有virtual关键字。

      关键点就是用指向基类的指针或是引用,操作对象。(基类名*指针名=&派生类对象)c++的灵魂慢慢悟...

  抽象类:含有纯虚函数的类称为抽象类,它不能生成对象,抽象类只能作为基类。

      为什么不能生成对象?看百度的解释:动物可以作为一个类派生出老虎、孔雀、狮子等子类,但是本身不能成对象(真心佩服这句解释)

      virtual <类型><函数名>(<参数表>)=0;

  重载:函数名相同但是定义却不相同,可能参数个数不同或是参数类型不同,这个是要在同一个类中才能实现。

     这个编译器会自动判定用哪个函数

  覆盖:在基类与子类中总有那么多事- -!

     子类与基类的函数名和参数都相同,但是基类必须要有virtual关键字。如果基类的函数前没有virtual关键字,则是隐藏了哦。这个跟覆盖不一样了!

  模板:暂无

5.new delete与malloc free的区别:

  都是在堆上进行动态分配内存和释放内存。

  不同点:new会调用对象的构造函数,delete会调用析构函数。说白了New与delete专为c++而存在,玩的就是对象。

  mallooc与free是c语言的函数,而deldete和new则是c++的运算符。

  malloc分配空间的大小时候需要指定空间大小,而new是自动计算的。

  注意:释放完内存将指针设置为NULL

6.内存的分配方式:

  1.静态存储区:内存在程序编译的时候就已经分配好了,在程序的整个运行期间都存在。全局变量,static变量等

  2.栈区分配:函数的局部变量和返回值在此创建,执行结束后被自动释放。

  3.堆区分配:也就是动态分配,new/malloc分配的,由自己决定释放。但一不小心内存泄露,如果有内存泄露的错误,先找这部分原因。

  4.文字常量区:常量和字符串就是放在这里的,程序结束后由系统释放

  5.程序代码区:存放函数体的二进制代码

*7.int、float、bool、指针类型的变量与“零”的比较值

  int:if(a==0)

  float:const EXPRESSION EXP=0.000001

      if(a<EXP&&a>-EXP)

  bool:if(!a) or if(a)

  指针类型:if(a!=NULL) or if(a==NULL)

*8.const与static的比较:

  static有两大作用:控制存储方式和控制可见性与链接类型

  一:由于函数在栈上分配的空间在函数结束后会释放掉,所以statc修饰变量,将变量存储到静态存储区而不是栈上,这样就可以再次调用了。虽然有全局变              量,但是会破坏变量的访问范围。

  二:针对类的成员来讲,类的静态成员函数只能访问类的静态数据和静态成员函数,因为它没有了this指针。静态成员变量只属于整个类所有,有独立的存储区

  const修饰变量,表示只读不能修改。int const a和const int a 是没有区别的

  const修饰函数,表示这是一个本地函数不能被模块外的函数调用。

  const修饰函数,返回值不能修改。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!