调用虚函数时的静态成员函数语义

时间:2012-08-28 15:58:49

标签: c++ inheritance

假设我们有一个班级

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();
}

通过指向派生类的基类指针调用基类静态成员函数时,调用哪个虚拟成员函数?

2 个答案:

答案 0 :(得分:4)

都不是。您将收到编译器错误。您无法通过static方法调用非static方法或访问非static成员。

//...
virtual void VirtualFunction( void ) = 0;

static void CallsVirtual( void ) {
    VirtualFunction();   // Nope!
}
//...

答案 1 :(得分:0)

使用this指针调用非静态成员函数。 this指针隐式传递给每个成员函数 但是,对于static成员函数,this指针根本不会传递。因此,您无法通过静态成员函数调用非静态成员函数。