C++之虚函数

112 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

虚函数介绍:

虚函数就是被virtual关键字所修饰的函数。虚函数中还包括纯虚函数,纯虚函数他是函数内部没有任何操作的,他只有定义内有实现的内容。纯虚函数的一般形式:virtual 函数类型 函数名 (参数表列) =0; 虚函数的主要做就是用于实现多态,多态是把借口和时间分开的,但是许多个类中具有不同的逻辑但是拥有同样的接口。

基类:


class BaseClass

{

public:

    BaseClass();

    ~BaseClass();

public:

    virtual void Init()=0;          //初始化

 


}; 

 这里的初始化就是一个虚函数,但是会发现他的结尾前有 =0,可以通过这样设置为纯虚函数 纯虚函数的一般形式:virtual 函数类型 函数名 (参数表列) =0; 


class MyUse : public BaseClass

{

public:

    MyUse();

    ~MyUse();

 

public:

    void Init();            //初始化

}

public BaseClass 这里是用于继承BaseClass类,在调用虚函数时,这里所调用的其实是它派生类重写的函数,并不是走进了基类的函数中  

这里需要注意的是:子类的析构函数无论加不加virtual都是对父类的析构函数进行重写。 Vptr-> 虚函数指针 Vtbl -> 虚函数表

只要有虚函数的存在 就会有虚函数表以及虚函数指针,虚函数表其实就是虚函数的地址。并且虚函数在存储过程中会有他的顺序,弗雷德虚函数永远在子类的虚函数之前,并且如果子类中有对父类的虚函数进行重载,在虚函数表中会覆盖顾磊的虚函数。

构造函数不可是虚函数

由于构造函数是用来实例化一个对象的,也就是我们所谓的初始化,在构造函数之前虚函数指针是没有值的,所以我们没办法把构造函数作为虚函数。

析构函数最好设为虚函数

析构函数与构造函数正好相反,执行子类的析构函数后,一定会执行父类的析构函数