对于虚函数的访问
适用于 虚拟 函数的类型取决于该访问控件进行函数调用。 函数的声明不影响特定类型的访问控制。 例如:
// 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的指针。这并不意味着调用的函数是该函数的基类版本。