다음을 통해 공유


전용 가상 함수

업데이트: 2007년 11월

Visual C++ 2008에서는 파생 클래스에서 전용 가상 함수를 처리하는 방식이 Managed Extensions for C++와 다르게 변경되었습니다.

Managed Extensions에서는 해당 액세스 수준에 제한을 받지 않고 파생 클래스 내에서 가상 함수를 재정의할 수 있었지만, 변경된 새 구문에서는 가상 함수가 자신이 액세스할 수 없는 기본 클래스 가상 함수는 재정의할 수 없습니다. 예를 들면 다음과 같습니다.

__gc class Foo {
   // inaccessible to a derived class 
   virtual void g();
};

__gc class Bar : public Foo {
public:
   // in Managed Extensions, ok: g() overrides Foo::g()
   // in new syntax, error: cannot override: Foo::g() is inaccessible …
   void g();
};

새 구문에서는 위와 같은 방식에 상응하는 기능이 없습니다. 가능한 방법은 기본 클래스 멤버를 액세스 가능하게, 즉 비전용 멤버로 만드는 것 뿐입니다. 상속된 메서드는 동일한 액세스 수준을 가질 필요가 없습니다. 이 예제에서 변화를 최소화하는 방법은 Foo 멤버를 protected로 만드는 것입니다. 이 경우 프로그램에서 Foo를 통한 메서드에의 일반적인 액세스는 여전히 금지됩니다.

ref class Foo {
protected:
   virtual void g();
};

ref class Bar : Foo {
public:
   virtual void g() override;
};

새 구문에서는 기본 클래스에 명시적 virtual 키워드가 없으면 경고 메시지가 생성됩니다.

참고 항목

개념

클래스 또는 인터페이스 내에서 멤버 선언

참조

Member Visibility