当前位置:   article > 正文

内联函数、构造函数、静态成员函数不可以定义为虚函数?_静态成员函数可以声明为虚函数

静态成员函数可以声明为虚函数

多态,即多种状态(形态)。简单来说,我们可以将多态定义为消息以多种形式显示的能。
多态是以封装和继承为基础的。
C++ 多态分类及实现:
i. 重载多态(Ad-hoc Polymorphism,编译期):函数重载、运算符重载
ii. ⼦类型多态(Subtype Polymorphism,运⾏期):虚函数
iii. 参数多态性(Parametric Polymorphism,编译期):类模板、函数模板
iv. 强制多态(Coercion Polymorphism,编译期/运⾏期):基本类型转换、⾃定义类型转换



静态多态(早绑定)
函数重载

  1. class A
  2. {
  3. public:
  4. void do(int a);
  5. void do(int a, int b);
  6. };

动态多态(晚绑定)
虚函数:⽤ virtual 修饰成员函数,使其成为虚函数
注意:

  1. 普通函数(类成员函数)不能是虚函数
  2. 静态函数(static)不能是虚函数
  3. 构造函数不能是虚函数(因为在调⽤构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针)
  4. 内联函数不能是表现多态性时的虚函数,

简而言之,成员函数实例相关,静态函数类相关。虚函数,是一种特殊的成员函数,用来实现运行时多态。

静态成员函数,可以不通过对象来调用,没有隐藏的this指针。virtual函数一定要通过对象来调用,有隐藏的this指针。
所以,关键问题是

static成员没有this指针。static function 是静态决议(编译的时候就绑定了)

而virtual function 是动态决议的(运行时才绑定)
 


内联函数、构造函数、静态成员函数不可以定义为虚函数

  1. 内联函数是编译时展开函数体,所以在此时就需要有实体,而虚函数是运行时才有实体,所以内联函数不可以为虚函数。
  2. 静态成员函数是属于类的,不属于任何一个类的对象,可以通过作用域以及类的对象访问,本身就是一个实体,所以不能定义为虚函数。
  3. 如果构造函数定义为虚函数,则需要通过查找虚函数表来进行调用。但是构造函数是虚函数的情况下是找不到的,因为构造函数自己本身也不存在,创建不了实例,没有实例化对象,则类的成员不能被访问。
     

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号