c++笔试面试宝典

VIP免费
2024-12-10 2 0 57.25KB 52 页 5.9玖币
侵权投诉
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++ JAVA 共同点,不同之处?
面向对象,指针,多重继承,内存管理。
4.继承优缺点。
类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变父
类的实现。但是类继承也有一些不足之处。首先,因为继承在编译时刻就定义
了,所以无法在运行时刻改变从父类继承的实现。更糟的是,父类通常至少定
义了子类的部分行为,父类的任何改变都可能影响子类的行为。如果继承下来
的实现不适合解决新的问题,则父类必须重写或被其更适合的类替换。这
依赖关系限制了灵活性并最终限制了复用
(待补充)
5.C++有性质(面向对象
封装,继承和多态。
在面向对象程序设计语言中,封装用可重用成分构造软件特性,它
仅支持的可重用,而且提高的可扩充性;息传递可以
实现发送一个通用的消而调用不同的方法;封装是实现信息隐蔽的一种技术
的是使类的定义和实现分
6.子类析构时要调用父类的析构函数
析构函数调用的次是先派生类的析构后类的析构,也就是说在类的的析
构调用的时,派生类的信息已经全销毁了定义一个对象时先调用类的构造
函数、然后调用派生类的构造函数析构的时候恰好:先调用派生类的析
构函数、然后调用类的析构函数 JAVA 无析构函数深拷贝浅拷贝
7.多态,函数,纯虚函数
8.求下面函数的返回值(微软)
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
x = 9999答案8
思路将x转为2制,看含有的 1 的个数。
9.什么是“用”?申明和使用“用”要注意些问题?
用就是标变的“别(alias),对应用的操作与对变直接操
果完相同。申明一个用的时切记要对其行初始化。明完
后,相当于标变量名名称即该目原名称,不能
作为其量名的别明一个用,不是新定义了一个变,它只
表示该引标变量名的一个别,它本身不是一数据类型,因此
本身单元,系也不给引用分配存单元。不能建数组的用。
10.用”作为函数数有点?
1)传递引函数与传递指针的果是一的。这时,被调函数的形参就成
调函数中的实或对象的一个别来使用,所以在被调函数中对
形参的操作就是对其相应的标对象调函数中的操作。
2使用传递函数的数,在内存中没有产生副本,它是直接对
操作而使用一量传递函数的数,当发生函数调用时,需要给形参
分配存单元,形参是实副本;如果传递的是对象,还将调用
构造函数。因此,当传递的数据较大时,用用一量传递参
效率和所占空间
3使用指针作为函数的然也能达到与使用用的果,但是,在被调
函数中同给形参分配存单元,且需要重复使用”*指针变量名”的形式进
行运算,这很容易产生程序阅读性差;另一方面,在调函数的调
用点处,必须用变的地作为实。而用更容易使用,更清
11.在什么需要使用“常用”? 
如果提高程序效率保护传递给函数的数据不在函数中被
改变,就应使用常用。常明方:const 类型标&引=标变
量名;
1
int a ;
const int &ra=a;
ra=1; //错
a=1; //正确
2
string foo( );
void bar(string & s);
那么下面的表达式将是非法的:
bar(foo( ));
bar(hello world”);
因在于 foo( )和”hello world”都会产生一个时对象,而在 C++中,这
时对象都是 const 类型的。因此面的表达式就是试图将一个 const 类型
的对象转换为非 const 类型,这是非法的。用型数应在能被定义为 const
情况下,尽量定义为 const 。
12.用”作为函数返回值类型的格式处和需要遵守?
格式:类型标&函数名(形参列表及类型说明){ //函数 }
处:在内存中不产生返回值副本;(注意:是因为这点因,所以
一个部变用是不可的。因为随着该局部变量生结束,相应
用也会失效产生 runtime error! 注意事项
1不能返回局部变用。这可以参照 Effective C++[1]的 Item 31。
因是部变会在函数返回后被销毁,因此被返回用就成为了”无
所指”的用,程序进入未知状态。
2不能返回函数内部 new 分配的内存的用。这可以参照 Effective C+
+[1]的 Item 31。然不存在部变的被动销毁问题,可对于这种情况(返
函数内部 new 分配内存的其它尴尬局面。如,被函数返回
用只是作为一个时变量出现,而没有被赋予一个实的变那么这个
用所指向的空间(由 new 分配就无法释放,造成 memory leak
3可以返回类成员的用,但最好是 const。这条原则可以参照 Effective
C++[1]的 Item 30。因是当对象的属性是与某种业(business
rule相关的时,其赋值常常与些其它属性对象的态有关,因此
有必要将赋值操作封装在一个则当中。如果其它对象可以获得该属性
非常量引或指针那么该属性的单纯赋值就会破坏业则的完整性
4)流操作符重载返回值申明为“用”的作用:
操作符<<>>,这个操作符常常希望连续使用,如:cout << "hello"
<< endl; 因此这个操作符的返回值是一个支持个操作符的
用。可的其它方案包括:返回一个对象和返回一个对象指针。但是对
返回一个对象,程序必须重新(拷贝)构造一个新的对象,也就是说,
连续<<操作符实际上是针对不同对象的这无法让人。对于返回
指针则不能连续使用<<操作符。因此,返回一个对象用是选择
这个选择很,它说明了用的重要以及无可替代性,也这就是 C+
摘要:

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

展开>> 收起<<
c++笔试面试宝典.docx

共52页,预览3页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:52 页 大小:57.25KB 格式:DOCX 时间:2024-12-10

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 52
客服
关注