华为面试题:什么函数不能声明为虚函数

 时间:2019-03-19  贡献者:北大青鸟佳音校区

导读:c 虚函数表(vtbl),www.accppx.com 在华为、中兴等企业招聘笔试面试中曾经出现过这样一道题目:什么 函数不能声明为虚函数? 该题答案为:普通函数(非成员函数)、静态成员函数、内联成员函 数、构

c  虚函数表(vtbl)
c 虚函数表(vtbl)

www.accppx.com 在华为、中兴等企业招聘笔试面试中曾经出现过这样一道题目:什么 函数不能声明为虚函数? 该题答案为:普通函数(非成员函数)、静态成员函数、内联成员函 数、构造函数、友元函数 该题考查的是虚函数声明的相关概念。

其解析如下: 虚函数通过继承方式来体现出多态作用, 它必须是基类的非静态成员 函数,其访问权限可以是 protected 或 public,在基类的类定义中 定义虚函数的一般形式是: virtual 函数返回值类型虚函数名(形参表){ 函数体 } 常见的不能声明为虚函数的有:普通函数(非成员函数)、静态成员 函数、内联成员函数、构造函数、友元函数。

(1)普通函数不能声明为虚函数。

普通函数(非成员函数)只能被重 载(overload),不能被重写(override),声明为虚函数也没有什 么意思,因此编译器会在编译时绑定函数。

(2) 构造函数不能声明为虚函数。

构造函数一般用来初始化对象,只 有在一个对象生成之后,才能发挥多态作用。

如果将构造函数声明为 虚函数,则表现为在对象还没有生成的时候来定义它的多态,这两点 是不统一的。

另外,构造函数不能被继承,因而不能声明为虚函数。

www.accppx.com (3) 静态成员函数不能声明为虚函数。

静态成员函数对于每个类来说 只有一份代码,所有的对象都共享这份代码,它不归某个对象所有, 所以也没有动态绑定的必要性。

(4) 内联(inline)成员函数不能声明为虚函数。

内联函数就是为了 在代码中直接展开,减少函数调用开销的代价。

虚函数是为了在继承 后对象能够准确的执行自己的动作,这是不可能统一的。

另外,内联 函数在编译时被展开,虚函数在运行时才能动态的绑定函数。

(5) 友元函数不能声明为虚函数。

友元函数不属于类的成员函数,不 能被继承。

设置虚函数时须注意以下几点: 只有类的成员函数才能说明为虚函数; 静态成员函数不能是虚函数; 内联函数不能为虚函数; 构造函数不能是虚函数; 析构函数可以是虚函数,而且通常声明为虚函数。

以上内容由北大青鸟佳音校区老师于网络整理, 学计算机课程选择北 大青鸟佳音校区!

www.accppx.com