我添加一下对“静态成员无多态特性”的理解,其他选项的解释参照其他牛人
首先,静态成员分静态数据成员跟静态成员函数。显然,这里我们只考虑静态成员函数。
而我们都知道,多态性是要通过指针或者引用才能体现出来的。但是,如果有引用或者指针的话,那代表着什么?说明,你必须申明对象。而我们知道静态成员函数是可以通过类直接访问的,所以这就是一个矛盾。
可能看了上面,你还是有疑问。再看看这个,
class A { static int a; public: virtual static void print() { cout << a << endl; } }; int A::a = 1; class B :public A { static int b; public: static void print() { cout << b << endl; } }; int B::b = 2; int main() { A* aa = new B; //B bb; //cout << sizeof(*aa) << endl; //答案为1,说明不存在vptr来指向一个虚表,下同 //cout << sizeof(bb) << endl; aa->print(); return 0; }
如果认为静态成员函数存在多态的话,那就是aa->print(); 但是试想一下,如果我调用A::print(); B::print();你能分清我想调用那个函数?再想想既然有这样的通过类的调用形式,那多态还有什么意义?
调用StackOverflow 里面常说的解答,No, because it doesn't make any sense in C++.
参考网址:http://stackoverflow.com/questions/9863007/can-we-have-a-static-virtual-functions-if-not-then-why