1.内联函数和宏的差别
内联函数要做参数类型检查,这是内联函数和宏相比的优势
2.指针和引用的区别
1>.非空区别。一个引用不能指向空值,必须指向一个对象。指针可以为空。
2>.合法性区别。使用引用不用检测其合法性,但指针必须先检查是否合法。
3>.可修改区别。指针在初始化之后还可以修改其指向的内容,但是引用在初始化指向的对象后将不能改变,但是对象内容可以改变。
3.C++中有了malloc/free,为什么还有new/delete?
对于非内部数据类型的对象而言,malloc/free不能满足动态对象的需求,因为对象在创建时要执行构造函数,消亡时调用析构函数,这些都是malloc无法满足的。new和delete可以满足并实现对象的要求。malloc和free是库函数,而new和delete是运算符。
4.句柄和指针的区别和联系
句柄是一个指向指针的指针。windows是一个以虚拟内存为基础的操作系统。Windows内存管理器中的对象经常会变换地址。
Windows使用句柄标记系统资源,隐藏系统信息,是个32bit的uint。指针标记某个物理内存地址,两者是截然不同的概念。
5.简要介绍一下STL和包容器
STL 是标准模版库,现已成为C++的标准配置,它是一个基于模版的容器类库,包括链表,列表,队列和堆栈,包含许多常用的算法,如查找,排序等,其目的是提供对常用需求重新开发的一种替代方法。
包容器是包容其他对象的对象。可以帮助程序员处理常用的任务。
6. 面向对象技术的基本概念
对象,类和继承
7. C++的空类默认产生哪些类成员函数?
默认构造函数,析构函数,拷贝构造函数,赋值函数
8. 哪一种成员变量可以在同一个类的实例之间共享
静态成员变量
9. 为什么析构函数可以为虚函数,构造函数不能为虚函数?
虚函数采用虚调用的方法,虚调用允许调用一个只知道接口而不知道具体对象类型的函数,但是如果要构造一个对象,就必须知道对象的准确类型,所以构造函数不能为虚函数。
10. 虚函数的代价
虚函数的对象必须维护一个V表,因此在使用虚函数时会产生系统开销