静态成员函数可以同时是虚函数吗?
如题:
static virtual fupo(){}
可以吗?
[解决办法]
可以
[解决办法]
为啥不编译一下试试。
[解决办法]
不可以
静态成员因为是静态所以就只有一个副本(即只有一份存储的地方),
而虚函数可能有很多副本,也就是说它可能需要好几个存储的地方。
class Base{
...
virtual a(int);
...
}
class Derived1:Base{
...
a(int);
...
}
class Derived2:Base{
...
a(int);
...
}
在这个程序中若virtual a(int)改为static virtual a(int)的话就只有一个副本了,
那就是说Derived1::a(int)可以修改Derived2::a(int)的了,我想这应该不是编程人员的
本意吧。
[解决办法]
不行
[解决办法]
谁说virtual有多个副本了?
[解决办法]
okokok
[解决办法]
通过名字改编之后, 虽然程序员看起来相同的函数名, 被编译器改成了丁是丁,卯是卯, 完全不同的名字.
virtual方法不能同时是static的原因在于, virtual方法由编译器提供了this指针, 而static是没有的. 当你的virtual声明为static, 叫编译器怎么办呢
[解决办法]
// From MSDN
Compiler Error C2576
'identifier ' : virtual member functions cannot be static
A static member function is declared as virtual. The object that calls a function must determine which virtual function is used. This is not possible for static functions, so they cannot be declared virtual.
The following sample generates C2576:
// C2576.cpp
struct X
{
static virtual void func() // C2576, remove virtual to resolve error
{
}
};
int main()
{
}
[解决办法]
virtual方法不能同时是static的原因在于, virtual方法由编译器提供了this指针, 而static是没有的. 当你的virtual声明为static, 叫编译器怎么办呢
//////////////////////////
LS理解得更透彻!!!
[解决办法]
静态成员函数只保存一个对象,但含virtual 函数 对象会生成一个虚函数表指针来动态确定具体调用的函数,有矛盾的。