首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

静态成员函数可以同时是虚函数吗?解决思路

2012-02-04 
静态成员函数可以同时是虚函数吗?如题:staticvirtualfupo(){}可以吗?[解决办法]可以[解决办法]为啥不编译

静态成员函数可以同时是虚函数吗?
如题:
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 函数 对象会生成一个虚函数表指针来动态确定具体调用的函数,有矛盾的。

热点排行