C++继承多态之什么样的函数可以被写成虚函数呢?

1. 构成虚函数需要满足的条件

class Base {
public:
    Base(int data) :ma(data) { cout << "Base(int data)" << endl; }
    ~Base() { cout << "~Base()" << endl; }

    virtual void show() { cout << "Base::show()" << endl; }
    virtual void show(int val) { cout << "Base::show(int)" << endl; }
protected:
    int ma;
};

内存布局如下图:
在这里插入图片描述

  1. 依赖于对象,首先vfptr存放在对象的内存中,那么函数调用依赖于对象;
  2. 该函数能被取地址,因为vftable中存放的是函数的地址。

2. 判断以下函数是否可以构成虚函数

  1. 静态成员方法
    答:不行
    静态方法的调用不依赖对象,没有对象

  2. 构造函数
    答:不行
    构造函数没有被调用,哪来的对象?

  3. 内联函数
    答:不行
    函数不能被取地址,不能存放在vftable中

  4. 析构函数
    答:可以
    调用依赖对象,且可以取地址,继承中设置析构函数为虚函数可以避免基类内存无法释放。

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页