假设我们有一个班级
class Abstract {
Abstract( void );
virtual ~Abstract( void ) = 0;
virtual void VirtualFunction( void ) = 0;
static void CallsVirtual( void ) {
VirtualFunction();
}
};
class Concrete : public Abstract {
Concrete( void ) {}
~Concrete( void ){}
virtual void VirtualFunction( void ) {/* Do virtual function-y stuff */}
};
int main( void ) {
Concrete _concrete;
Abstract& _abstractReference = _concrete;
_abstractReference.callsvirtual();
}
通过指向派生类的基类指针调用基类静态成员函数时,调用哪个虚拟成员函数?
答案 0 :(得分:4)
都不是。您将收到编译器错误。您无法通过static
方法调用非static
方法或访问非static
成员。
//...
virtual void VirtualFunction( void ) = 0;
static void CallsVirtual( void ) {
VirtualFunction(); // Nope!
}
//...
答案 1 :(得分:0)
使用this
指针调用非静态成员函数。 this
指针隐式传递给每个成员函数
但是,对于static
成员函数,this
指针根本不会传递。因此,您无法通过静态成员函数调用非静态成员函数。