1.面试官:什么是函数的重载?
应聘者:函数的重载就是允许使用同一个函数名来定义多个函数,但是这些函数的参数个数和类型不同。
2.面试官:如何引用一个已经定义过的全局变量?
应聘者:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果用extern方式引用,假定犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3.面试官:简述递归算法的特点。
应聘者:在实际编程中,有许多定义或者问题本身具有递归性质,所以顺其自然就用递归来解决,这样不仅代码少,而且结构清晰。递归算法的特点:所谓递归就是把一个大型的复杂问题层层地转化为一个与原问题相似的较小规模的问题,再逐步求解小问题,再返回得到较大问题的解,由于递归只需要少量的步骤就可以描述解题过程中所需要的多次重复计划,所以大大减少了代码量,递归算法的关键在于找出递归方程和递归终止条件。
4.面试官:“.”运算符和“->”运算符都能访问成员,但是哪种方法好?
应聘者:如果有一个指向对象的指针,则使用“->”运算符最合适;如果是实例化一个对象,并将其储存到一个局部变量中,则使用“.”运算符最为合适。
5.面试官:友元的作用和优缺点?
应聘者:友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。优点:(1)可以灵活地实现需要访问若干类的私有或受保护的成员才能完成的任务。
(2)便于与其他不支持类概念的语言进行混合编程。
(3)通过使用友元函数重载可以更自然地使用C++语言的I/O流库。
缺点:一个类将对其非公有成员的访问权限授予其他函数或者类,会破坏该类的封装性,降低该类的可靠性和可维护性。
6.面试官:访问命名空间成员有哪几种方法?
应聘者:在引用命名空间成员时,要用命名空间名和作用域限定符对命名空间成员进行限定,以区别不同的命名空间中的同名标识符。即:
命名空间名::命名空间成员名;
这种方法是有效的,能保证所引用的实体有唯一的名字。但是如果命名空间名字比较长,尤其在有命名空间嵌套的情况下为引用一个实体,需要写很长的名字。在一个程序中可能要多次引用命名空间成员,就会感到很不方便。1. 使用命名空间别名引用成员为命名空间起一个别名,用来代替较长的命名空间名。
可以用一个较短而易记的别名代替它。例如:
namespace TV= Television; //别名与原名Television等价
2. 使用using命名空间成员名using后面的命名空间成员名必须是由命名空间限定的名字。例如:
using std::cout;
该语句表示,在using语句所在的作用域中会用到命名空间std中的成员cout,在本作用域中如果使用该命名空间成员时,不必再用命名空间限定。例如在用using声明后,在其后程序中出现cout就是隐含的值std::cout。
7.面试官:作用域运算符“::”都有哪些用法?
应聘者:C++作用域运算符主要有两种应用方式。
1. 类与类的成员之间声明一个类A,类A里声明了一个成员函数“void fun();”,但是没有在类的声明里给出函数fun()的定义,那么在类外定义函数fun()时,就要写成“void A::fun()”,表示这个fun()函数是类A的成员函数。
2. 作用域作用域一般分为全局作用域、局部作用域和语句作用域。作用域的范围越小优先级越高。如果希望在局部变量的作用域内使用同名的全局变量,就可以在该变量前面加上“::”。
3. 命名空间C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。在没有写“using namespace std;”这句代码时,程序里都是使用std::cout而不是cout。
8.面试官:C++有哪几种继承方式,各自有什么特点?
应聘者:继承方式主要有三种:public、private和protected。在缺省条件下是private继承,三种方式中,public继承用得最多,不同的继承方式决定了子类中从基类继承过来的成员的访问属性。(1)public继承:基类的public、protected成员在子类中访问属性不变,子类新增的成员函数可以直接访问,对于基类的private成员依然是基类的私有,子类无法直接进行访问。
(2)private继承:基类的public、protected成员转变为子类的private成员,子类新增的成员函数可以进行访问,对于基类的private成员依然是基类的私有,子类无法直接进行访问。
(3)protected继承:基类的public、protected成员转变为子类的protected成员,子类新增的成员函数可以进行访问,对于基类的private成员依然是基类的私有,子类无法直接进行访问。
private继承和protected继承的区别是private继承的子类如果继续被继承,那么这些从其分类继承得到的数据将不会被其子类继承,而protected则是可以的。