2021年C++面试宝典版.doc

1.new、delete、malloc、free关系 delete会调用对象析构函数,和new对应free只会释放内存,new调用结构函数。malloc和free是C++/C语言标准库函数,new/delete是C++运算符。它们全部可用于申请动态内存和释放内存。对于非内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象在创建同时要自动实施结构函数,对象在消亡之前要自动实施析构函数。因为malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把实施结构函数和析构函数任务强加于malloc/free。所以C++语言需要一个能完成动态内存分配和初始化工作运算符new,和一个能完成清理和释放内存工作运算符delete。注意new/delete不是库函数。 2.delete和 delete []区分 delete只会调用一次析构函数,而delete[]会调用每一个组员析构函数。在More Effective C++中有更为具体解释:“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operatordelete来释放内存。”delete和New配套,delete []和new []配套 MemTest* mTest1=newMemTest[10]; MemTest* mTest2=newMemTest; int*pInt1=newint[10]; int*pInt2=newint; delete[]pInt1; //-1- delete[]pInt2; //-2- delete[]mTest1;//-3- delete[]mTest2;//-4- 在-4-处报错。 这就说明:对于内建简单数据类型,delete和delete[]功效是相同。对于自定义复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针简单来说,用new分配内存用delete删除用new[]分配内存用delete[]删除delete[]会调用数组元素析构函数。内部数据类型没有析构函数,所以问题不大。假如你在用delete时没用括号,delete就会认为指向是单个对象,不然,它就会认为指向是一个数组。 3.C和C++ 共同点?不一样之处? C是面向过程语言,C++是 面向对象,不过不全是。 JAVA是纯 面向对象 在语言层面上,C++和JAVA全部基础一样,只是JAVA语言去掉了指针,多继承等轻易犯错东东.现在JAVA不单纯是指语言,它是一个开发平台通称,Java通用性好,能够跨平台直接移植,只要有安装Java虚拟机(JVM)就能够了。开发效率高。生成机器码效率没有汇编和C高。 4.继承优缺点。 类继承是在编译时刻静态定义,且可直接使用,类继承能够较方便地改变父类实现。不过类继承也有部分不足之处。首先,因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承实现。更糟是,父类通常最少定义了子类部分行为,父类任何改变全部可能影响子类行为。假如继承下来实现不适合处理新问题,则父类必需重写或被其它更适合类替换。这种依靠关系限制了灵活性并最终限制了复用性。 (待补充) 5.C++有哪些性质(面向对象特点) 封装,继承和多态。 在面向对象程序设计语言中,封装是利用可重用成份结构软件系统特征,它不仅支持系统可重用性,而且还有利于提升系统可扩充性;消息传输能够实现发送一个通用消息而调用不一样方法;封装是实现信息隐蔽一个技术,其目标是使类定义和实现分离。 6.子类析构时要调用父类析构函数吗? 析构函数调用次序是先派生类析构后基类析构,也就是说在基类析构调用时候,派生类信息已经全部销毁了定义一个对象时先调用基类结构函数、然后调用派生类结构函数;析构时候恰好相反:先调用派生类析构函数、然后调用基类析构函数;JAVA无析构函数深拷贝和浅拷贝 7.多态,虚函数,纯虚函数 多态:是对于不一样对象接收相同消息时产生不一样动作。C++多态性具体表现在运行和编译两个方面:在程序运行时多态性经过继承和虚函数来表现; 在程序编译时多态性表现在函数和运算符重载上 虚函数:在基类中冠以关键字 virtual 组员函数。 它提供了一个接口界面。许可在派生类中对基类虚函数重新定义。 纯虚函数作用:在基类中为其派生类保留一个函数名字,方便派生类依据需要对它进行定义。作为接口而存在 纯虚函数不含有函数功效,通常不能直接被调用。 从基类继承来纯虚函数,在派生类中仍是虚函数。假如一个类中最少有一个纯虚函数,那么这个类被称为抽象类(abstract class)。 抽象类中不仅包含纯虚函数,也可包含虚函数。l抽象类必需用作派生其它类基类,而不能用于直接创建对象实例。但仍可使用指向抽象类指针支持运行

文档评论(0)

1亿VIP精品文档

相关文档