abstract(C++/CLI 및 C++/CX)

abstract 키워드는 다음 중 하나를 선언합니다.

  • 형식은 기본 형식으로 사용될 수 있지만 형식 자체는 인스턴스화될 수 없습니다.

  • 형식 멤버 함수는 파생된 형식에서만 정의될 수 있습니다.

모든 플랫폼

구문

class-declarationclass-identifierabstract {}

virtualreturn-typemember-function-identifier() abstract ;

설명

첫 번째 예제 구문에서는 클래스를 추상으로 선언합니다. 클래스 선언 구성 요소는 네이티브 C++ 선언(class또는) 또는 struct컴파일러 옵션이 지정된 경우 /ZW C++ 확장 선언(ref 클래스 또는 /clr ref 구조체)일 수 있습니다.

두 번째 예제 구문에서는 가상 멤버 함수를 추상으로 선언합니다. 함수를 추상으로 선언하는 것은 함수를 순수 가상 함수로 선언하는 것과 같습니다. 멤버 함수를 추상으로 선언하면 바깥쪽 클래스가 추상으로 선언됩니다.

abstract 키워드는 네이티브 코드와 플랫폼별 코드에서 지원됩니다. 즉, /ZW 또는 /clr 컴파일러 옵션을 사용하거나 사용하지 않고 컴파일할 수 있습니다.

컴파일 시간에 __is_abstract(type) 형식 특성을 사용하여 형식이 추상인지 여부를 검색할 수 있습니다. 자세한 내용은 형식 특성에 대한 컴파일러 지원을 참조하세요.

abstract 키워드는 상황에 맞는 재정의 지정자입니다. 상황에 맞는 키워드에 대한 자세한 내용은 상황에 맞는 키워드를 참조하세요. 재정의 지정자에 대한 자세한 내용은 방법: 네이티브 컴파일에서 재정의 지정자 선언을 참조 하세요.

Windows 런타임

자세한 내용은 Ref 클래스 및 구조체를 참조하세요.

요구 사항

컴파일러 옵션: /ZW

공용 언어 런타임

요구 사항

컴파일러 옵션: /clr

예제

다음 코드 예제에서는 X 클래스가 abstract로 표시되었기 때문에 오류가 발생합니다.

// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
   virtual void f() {}
};

int main() {
   X ^ MyX = gcnew X;   // C3622
}

다음 코드 예제에서는 abstract로 표시된 네이티브 클래스를 인스턴스화하기 때문에 오류가 발생합니다. 이 오류는 /clr 컴파일러 옵션 사용 여부와 관계없이 발생합니다.

// abstract_keyword_2.cpp
class X abstract {
public:
   virtual void f() {}
};

int main() {
   X * MyX = new X; // C3622: 'X': a class declared as 'abstract'
                    // cannot be instantiated. See declaration of 'X'}

다음 코드 예제에서는 f 함수가 정의를 포함하지만 abstract로 표시되었기 때문에 오류가 발생합니다. 예제의 마지막 문에서는 추상 가상 함수를 선언하는 것이 순수 가상 함수를 선언하는 것과 일치함을 보여 줍니다.

// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
   virtual void f() abstract {}   // C3634
   virtual void g() = 0 {}   // C3634
};

참고 항목

.NET 및 UWP용 구성 요소 확장