虚函数(virtual)为啥不能是static
- 静态成员函数,可以不通过对象来调用,即没有隐藏的this指针。
- virtual函数一定要通过对象来调用,即有隐藏的this指针。
static成员没有this指针是关键!
static function都是静态决议的(编译的时候就绑定了)
而virtual function 是动态决议的(运行时候才绑定)
例证
#include <iostream> #include <bitset> using namespace std; class A { public: A(int a) { this->val2 = a; } static void get_val() { this->val2 = 4; cout << "hello" << val << endl; } private: static int val; int val2; }; int A::val = 4; int main() { A a(2); a.get_val(); }
编译错误