2012-08-28 56 views
0

假设我们有一个类静态成员函数调用的语义虚函数时

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

哪个虚成员函数当一个基类的静态成员函数通过基类指针调用派生类中被调用?

回答

4

都没有。你会得到一个编译器错误。您不能通过调用非static方法或通过static方法访问非static成员。

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

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

这是我所期望的,因为静态成员函数没有这个指针 –

+1

你可以在静态函数中访问非静态成员。但是你需要一个明确的对象来做到这一点。 –

+0

所以如果CallsVirtual把一个基类指针作为参数,我想我可以规避它,例如CallsVirtual(Abstract&that){that.VirtualFunction; }但是这使得它首先使它静止=) –

0

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

相关问题