我们先看这段代码
#include<iostream>
using namespace std;
class A {
public:
void f() { cout << "f" << endl; };
virtual void f1() { cout << "f1" << endl; };
};
int main()
{
A* a = nullptr;
a->f();
a->f1();
return 0;
}
结果:a可以调用f,但是不能调用;
分析:虚函数是动态绑定的,调用其实就是nullptr::a,所以会报错,非虚函数是静态绑定的,则相当于A::a。
含有虚函数的类中会有一个虚函数指针,本身占用一定空间,虚函数指针是通过查找虚函数表确定调用函数的,如果同时new多个对象,虚函数表可以共用。