abstract(C++ 구성 요소 확장)
abstract 키워드는 다음 중 하나를 선언 합니다.
형식은 기본 형식으로 사용할 수 있지만 형식 자체를 인스턴스화할 수 없습니다.
파생된 형식에서만 형식 멤버 함수를 정의할 수 있습니다.
모든 플랫폼
구문
class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;
설명
첫 번째 예제 구문에서는 클래스를 추상으로 선언합니다.클래스 선언 구성 요소는 네이티브 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
};