C++虚函数 - 静态函数能否为虚函数
1.virtual与静态函数 C++中,静态成员函数不能被声明为virtual函数。 例如,下面的程序会编译失败。 class Test { public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { } }; 同样地,静态成员函数也不能被声明为const和volatile. 下面的程序也会编译失败。 class Test { public: // 编译错误: static成员函数不能为const static void fun() const { } // 如果声明为下面这样,是可以的。 const static void fun() {} 或类似于 const static int fun() { return 0; } }; 2.为何static成员函数不能为virtual static成员不属于任何类对象或类实例,所以即使给此函数加上virutal也是没有任何意义的。 静态与非静态成员函数之间有一个主要的区别。那就是静态成员函数没有this指针。 虚函数依靠vptr和vtable来处理。vptr是一个指针,在类的构造函数中创建生成,并且只能用this指针来访问它,因为它是类的一个成员,并且vptr指向保存虚函数地址的vtable. 对于静态成员函数,它没有this指针,所以无法访问vptr.