我添加一下对“静态成员无多态特性”的理解,其他选项的解释参照其他牛人
首先,静态成员分静态数据成员跟静态成员函数。显然,这里我们只考虑静态成员函数。
而我们都知道,多态性是要通过指针或者引用才能体现出来的。但是,如果有引用或者指针的话,那代表着什么?说明,你必须申明对象。而我们知道静态成员函数是可以通过类直接访问的,所以这就是一个矛盾。
可能看了上面,你还是有疑问。再看看这个,
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