捷通华声笔试面试里做得不好的题总结

来源:互联网 发布:宝安 知乎 编辑:程序博客网 时间:2024/04/30 05:02

1.new与malloc的区别

(1)new是C++操作符,malloc是C库函数.

(2)对于 非内部数据结构的对象而言,malloc无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于mallce是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free.

(3)new可以认为是malloc加构造函数的执行.

(4)new出来的是对象,而malloc出来的是(void *)

2.如何禁用掉拷贝构造函数与赋值操作符?

在类里声明但是不定义.禁用后可以防止”浅拷贝”.

附:浅拷贝指当一个类里有指针成员指向new出来的数据时,当用一个对象来初始化另一个对象的时候,若将数据重新new一个,则为深拷贝,否则为浅拷贝.浅拷贝容易造成的问题是当一个对象析构后另一个对象访问该指针会出问题.

调用拷贝构造函数的情况:(1)一个对象以值传递的方式传入函数体(2)一个对象以值传递的方式从函数返回(3)一个对象定义时需要通过另一个对象进行初始化.

3.一个空类,编译器会默认为它加上什么东西?

(1)默认构造函数
(2)拷贝构造函数

(3)析构函数

(4)赋值运算符

4. C++中向函数传递参数的方式

(1)值传递

(2)指针传递

(3)引用传递

4.二叉树的结点定义和求叶子数

结点{数据,左右孩子指针}

求叶子数:递归解决.

5.666个苹果,10个箱子,如何放能让客人买1-666个苹果都直接给若干箱子就行了.

1,2,4,8,16,32,64,128,256,155.(用程序如何实现?)