数据结构基础

数据结构基础

ID:44510221

大小:45.50 KB

页数:4页

时间:2019-10-22

数据结构基础_第1页
数据结构基础_第2页
数据结构基础_第3页
数据结构基础_第4页
资源描述:

《数据结构基础》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1、C/C++中new和malloc的区别hmalloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要口动执行构造函数,对象在消亡之前要◎动执行析构函数。由于malloc/frcc是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/frce.3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内

2、存工作的运算符delete.注意new/delete不是库

3、*

4、数。4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存new是个操作符,和什么……有一样的地位。malloc是个分配内存的函数,供你调用的。new是保昭字,不需要头文件支持。malloc需要头文件库两数支持。new建立的是一个对象,malloc分配的是一块内存。new建立的对彖你可以把它当成一个普通的对彖,用成员两数访问,不耍直接访问它的地址空间malloc分配的是一块内存区域,就用指针访问好了,而俎还可以在里面移动指针。简而言之:new是一个操作符,可以重

5、载malloc是一个函数,可以覆盖new初始化对象,调用对象的构造函数,对应的delete调用和应的析构函数malloc仅仅分配内存,free仅仅回收内存2、单链表单链农是-•种链式存取的数据结构,丿冃一组地址任意的住储讥元存放线性农中的数拥元索。链农中的数据是以节点來表示的,每个节点的构成:元索(数据元索的映象)+指针(指示后继元索存储位置),元索就是存储数据的存储单元,指针就是连接每个节点的地址数据。以“结点的序列”表示线性表称作线性链表(单链表)单链表是链式存取的结构,为找第i个数据兀素,必须先找到第i-1个数据元素。因此,查找第i个数据元素的

6、基本操作为:移动指针,比较j和i3、多重继承的优缺点多重继承的优点很明显:简单,清晰,更冇利于复用。不会因为基类一个小小的改变而大张旗鼓去改代码。缺点也很明显:首先,二义性。两个基类中有同名方法的时候,你不得不在子类的调川中指明此方法出自那个基类。这看起來有些麻烦,幸好在你迷糊的时候,编译器会提醍你。其次:假如类A派生了B和C,而B和C共同派生了D,麻烦就出现了。这种中间大两头小的继承树有个形彖的名字:钻右型继承树(DOD:DiamondOfDeath)。从名字看此君绝非善类,事实也如此,A是D的父类没错,但是冇两条路径。这样的数据组织方式会有-些难

7、以预料的后果。除去二义性不说,想想吧,D中有多少个看似重复的方法,有多少个名字相同的数据成员!不惜一切代价,避免DOD的出现。除非,你认为DOD出现在这里是最恰当不过的,而且,确保你你使用了虚基类(虚继承),确保你对每个类的细节都完全清楚,确保你知道虚基类(虚继承)的副作用。其次,多重继承还会带來一些其他的问题:使用父类指针指向子类对彖变成了一件复杂的事情。你不得不用到C++中提供的dynamic_casl来执行强制转换。至于dynamic_casl,也是个麻烦的家伙,它是在运行期间而非编译期间进行转换的(因为编译期间它不能确定到底要转向一个什么类型

8、),因此除了会带來一些轻微的性能损失,它要求编译器允许RTTI(RuntimeTypeInformation,运行时类朝信息),也就是要求编译器保存所有类在运行时的信息。再者,多重继承还会使得子类的viable变得不同寻常。单继承的viable只是在父类viable的表尾加上新的虚函数,子类对象的viable中包含了有序的父类vtableo而对于多重继承,两个父类可能有完全不同的viable,因此,子类的viable中绝对不可能包含完整的有序的两个父类的vtableo子类的viable中可能包含了两块不相连的父类viable,因此每个父类都被迫追加了

9、一个vtable,也就是,每个父类的对象都添加了一个指针。孰优孰劣,自己把握。没有永远最好的,只有当前适合的。Jnva中摒弃了多重继承可能也是出于太过复朵,可能有不可料知的结果的原因。4、虚函数和纯虚函数的区别虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使川多态特性,我们常常需要在基类中定义虚函数。classCmanpublic:virtualvoidEat(){};voidMove();

10、private:};classCChild:publicCManpublic:virtualvoidEat(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。