首先我们先做个例子试试看可以吗?
class A{
public : A(){};
~A() = default;
static virtual void test() {
}
};
int main()
{
A a;
return 0;
}
编译结果报错:
经过查询资料得知
- 首先的话,静态函数是不和任何类对象或类实例相关联,所以就算给函数加上viruatl是没有任何意义的
- 静态与非静态成员函数之间有一个主要的区别,就是静态成员函数可以不通过this指针来进行调用
- 虚函数依靠vptr和vtable来处理.vptr是一个指针,在类的构造函数中创建生成,并且只能用this去当问它,因为vptr是类的成员之一,并且vptr指向保存虚函数地址的vtable
- 对于静态成员函数,没有this指针,没有办法访问vptr.为什么static函数不能为virtual
- 虚函数的调用关系 this -> vptr - >vtable -> virtual function