对于虚函数的访问

适用于 虚拟 函数的类型取决于该访问控件进行函数调用。 函数的声明不影响特定类型的访问控制。 例如:

// access_to_virtual_functions.cpp
class VFuncBase
{
public:
    virtual int GetState() { return _state; }
protected:
    int _state;
};

class VFuncDerived : public VFuncBase
{
private:
    int GetState() { return _state; }
};

int main()
{
   VFuncDerived vfd;             // Object of derived type.
   VFuncBase *pvfb = &vfd;       // Pointer to base type.
   VFuncDerived *pvfd = &vfd;    // Pointer to derived type.
   int State;

   State = pvfb->GetState();     // GetState is public.
   State = pvfd->GetState();     // C2248 error expected; GetState is private;
}

在前面的示例中,调用虚函数 GetState 使用指针类型 VFuncBase 调用 VFuncDerived::GetState,并且, GetState 视为公共的。 但是,在中,因为 GetState 声明私有在类 VFuncDerived,调用使用指针的 GetState 键入 VFuncDerived 是访问控制冲突。

警告

虚函数 GetState 可以调用使用对基类 VFuncBase的指针。这并不意味着调用的函数是该函数的基类版本。

请参见

参考

成员访问控件