가상 함수 액세스
액세스 제어 적용 가상 함수는 함수를 호출 하는 데 사용 하는 형식에서 결정 됩니다.재정의 선언 함수 액세스 제어를 지정 된 형식에 영향을 주지 않습니다.예를 들면 다음과 같습니다.
// 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 public로 간주 됩니다.그러나 호출 GetState 에 대 한 포인터를 사용 하 여 입력 합니다 VFuncDerived 컨트롤 액세스 위반 때문에 GetState 클래스에서 private으로 선언 된 VFuncDerived.
주의 |
---|
가상 함수 GetState 기본 클래스에 대 한 포인터를 사용 하 여 호출할 수 있는 VFuncBase.이 기본 클래스 버전의 해당 함수 호출 하는 함수 임을 의미 하지는 않습니다. |