C、C++概念性问题总结概要1.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C、C概念性问题总结概要1

面试中概念性问题总结 1、new delete和malloc free的区别与联系? 面试中可以这样回答: 都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的析构函数,而free 不会调用对象的析构函数。 详细讲解: ① malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都用于在堆(heap)上进行动态的内存操作(申请动态内存和释放内存)。 ② delete不仅会释放空间,在释放前会调用析构函数,和new对应,new调用构造函数,free只会释放内存。 ③ 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象 在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 ④ C++程序经常要调用C函数,其实new/delete内部实现也调用了malloc/free。 而C程序只能用malloc/free管理动态内存 ⑤ new是强制类型的,不需要考虑类型,而malloc不是,它返回的指针是void*型,必须要强转成需要的类型。(注意) ⑥ new 可以调用构造函数在声明的时候初始化,malloc只是分配空间,需要在其他地方初始化。而且malloc需要指定分配空间大小, 而new是自动计算的。 ⑦ new/delete是可以重载的,而重载之后,就成为了函数。当new/delete在类中被重载的时候,可以自定义申请过程,比如记录所申请内存的总长度,以及跟踪每个对象的指针。 ⑧free和delete可以释放NULL指针。 举例说明: Stu* stu = malloc(sizeof(Stu)); // Stu是一个类 采用malloc初始化,你将不会调用Stu的构造方法,而只是单纯的分配空间。而且我们只认为你是分配一个空间,而不是想创建一个对象。(用于struct) Stu * stu = new Stu ();则会调用Stu的构造方法来初始化对象,也就是说你既要分配空间又要初始化这段空间,让它变成一个对象。(用于class) delete与delete[]的区别 delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。当delete操作符用于数组时,它为每个数组元素调用析构函数, delete与new配套,delete []与new []配套。 提醒:关于new 、delete、malloc、free的区别,大家尽量多的记忆几点,面试的时侯可以多回答几点。 C++中的class和struct的区别: 从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别: ① 默认继承权限:class的继承按照private继承处理,struct的继承按照public继承处理。 ② 成员的默认访问权限:class的成员默认是private权限,struct默认是public权限。 C++和C中struct的区别: 在C++中struct可以定义方法,C中不可以。 static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 原理分析: ① 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 ② 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。 ③ static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档