我們先看這段代碼
#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多個對象,虛函數表可以共用。