다음을 통해 공유


abstract(C++ 구성 요소 확장)

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

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

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

모든 플랫폼

구문

class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;

설명

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

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

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

형식이 __is_abstract(type) 형식 특성을 사용하는 추상인지 컴파일 시간에 감지할 수 있습니다. 자세한 내용은 형식 특성에 대한 컴파일러 지원(C++ 구성 요소 확장)을 참조하십시오.

abstract 키워드는 상황에 맞는 재정의 지정자입니다. 대/소문자를 구분하는 키워드에 대한 자세한 내용은 상황에 맞는 키워드(C++ 구성 요소 확장)를 참조하십시오. 지정자 재정의에 대한 자세한 내용은 방법: 네이티브 컴파일에서 지정자 재정의 선언을 참조하십시오.

Windows 런타임

Ref 클래스 및 구조체에 대한 자세한 내용은을 참조하십시오.

요구 사항

컴파일러 옵션: /ZW

공용 언어 런타임

요구 사항

컴파일러 옵션: /clr

예제

예제

다음 코드 예제는 class 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
};

참고 항목

개념

런타임 플랫폼의 구성 요소 확장