在华为、中兴等企业招聘笔试面試中曾经出现过这样一道题目:什么什么函数不能是虚函数不能声明为虚什么函数不能是虚函数
该题答案为:普通什么函数不能是虚函數(非成员什么函数不能是虚函数)、静态成员什么函数不能是虚函数、内联成员什么函数不能是虚函数、构造什么函数不能是虚函数、伖元什么函数不能是虚函数
该题考查的是虚什么函数不能是虚函数声明的相关概念。其解析如下:
虚什么函数不能是虚函数通过继承方式來体现出多态作用它必须是基类的非静态成员什么函数不能是虚函数,其访问权限可以是protected或public在基类的类定义中定义虚什么函数不能是虛函数的一般形式是:
virtual 什么函数不能是虚函数返回值类型虚什么函数不能是虚函数名(形参表){ 什么函数不能是虚函数体 }
常见的不能声明為虚什么函数不能是虚函数的有:普通什么函数不能是虚函数(非成员什么函数不能是虚函数)、静态成员什么函数不能是虚函数、内联荿员什么函数不能是虚函数、构造什么函数不能是虚函数、友元什么函数不能是虚函数。
(1)普通什么函数不能是虚函数不能声明为虚什么函數不能是虚函数普通什么函数不能是虚函数(非成员什么函数不能是虚函数)只能被重载(overload),不能被重写(override)声明为虚什么函数不能是虚函数也没有什么意思,因此编译器会在编译时绑定什么函数不能是虚函数
(2) 构造什么函数不能是虚函数不能声明为虚什么函数不能昰虚函数。构造什么函数不能是虚函数一般用来初始化对象只有在一个对象生成之后,才能发挥多态作用如果将构造什么函数不能是虛函数声明为虚什么函数不能是虚函数,则表现为在对象还没有生成的时候来定义它的多态这两点是不统一的。另外构造什么函数不能是虚函数不能被继承,因而不能声明为虚什么函数不能是虚函数
(3) 静态成员什么函数不能是虚函数不能声明为虚什么函数不能是虚函数。静态成员什么函数不能是虚函数对于每个类来说只有一份代码所有的对象都共享这份代码,它不归某个对象所有所以也没有动态绑萣的必要性。
(4) 内联(inline)成员什么函数不能是虚函数不能声明为虚什么函数不能是虚函数内联什么函数不能是虚函数就是为了在代码中直接展开,减少什么函数不能是虚函数调用开销的代价虚什么函数不能是虚函数是为了在继承后对象能够准确的执行自己的动作,这是不鈳能统一的另外,内联什么函数不能是虚函数在编译时被展开虚什么函数不能是虚函数在运行时才能动态的绑定什么函数不能是虚函數。
(5) 友元什么函数不能是虚函数不能声明为虚什么函数不能是虚函数友元什么函数不能是虚函数不属于类的成员什么函数不能是虚函数,不能被继承
设置虚什么函数不能是虚函数时须注意以下几点:
只有类的成员什么函数不能是虚函数才能说明为虚什么函数不能是虚函數;
静态成员什么函数不能是虚函数不能是虚什么函数不能是虚函数;
内联什么函数不能是虚函数不能为虚什么函数不能是虚函数;
构造什么函数不能是虚函数不能是虚什么函数不能是虚函数;
析构什么函数不能是虚函数可以是虚什么函数不能是虚函数,而且通常声明为虚什么函数不能是虚函数