다음을 통해 공유


가상 함수 액세스

액세스 제어 적용 가상 함수는 함수를 호출 하는 데 사용 하는 형식에서 결정 됩니다.재정의 선언 함수 액세스 제어를 지정 된 형식에 영향을 주지 않습니다.예를 들면 다음과 같습니다.

// 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.이 기본 클래스 버전의 해당 함수 호출 하는 함수 임을 의미 하지는 않습니다.

참고 항목

참조

멤버 액세스 제어