상속 키워드

Microsoft 전용

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-name

여기서

class-name
선언되는 클래스의 이름입니다.

C++를 사용하면 클래스 정의 전에 클래스 멤버에 대한 포인터를 선언할 수 있습니다. 예시:

class S;
int S::*p;

위의 p 코드에서 S 클래스의 정수 멤버에 대한 포인터로 선언됩니다. 그러나 class S 이 코드에서는 아직 정의되지 않았으며 선언된 것만 있습니다. 컴파일러는 이러한 포인터를 발견하면 포인터의 일반화된 표현을 만들어야 합니다. 표현의 크기는 지정된 상속 모델에 따라 달라집니다. 컴파일러에 상속 모델을 지정하는 세 가지 방법이 있습니다.

  • 스위치를 사용하는 명령줄에서 /vmg

  • pointers_to_members pragma 사용

  • 상속 키워드(keyword) 및 __single_inheritance__multiple_inheritance__virtual_inheritance. 이 방법은 클래스별로 상속 모델을 제어합니다.

    참고 항목

    항상 클래스를 정의한 후 클래스 멤버에 대한 포인터를 선언하면 이러한 옵션을 사용할 필요가 없습니다.

클래스가 정의되기 전에 클래스 멤버에 대한 포인터를 선언하면 결과 실행 파일의 크기와 속도에 부정적인 영향을 줄 수 있습니다. 클래스에서 사용하는 상속이 복잡할수록 클래스의 멤버에 대한 포인터를 나타내는 데 필요한 바이트 수가 늘어나게 됩니다. 또한 포인터를 해석하는 데 필요한 코드가 클수록 단일(또는 아니요) 상속은 가장 복잡하며 가상 상속은 가장 복잡합니다. 클래스가 정의되기 전에 선언하는 멤버에 대한 포인터는 항상 가장 크고 복잡한 표현을 사용합니다.

위의 예제를 다음과 같이 변경한 경우

class __single_inheritance S;
int S::*p;

지정한 명령줄 옵션이나 pragmas에 관계없이 멤버 class S 에 대한 포인터는 가능한 가장 작은 표현을 사용합니다.

참고 항목

클래스 멤버 포인터 표현의 동일한 정방향 선언이 해당 클래스의 멤버에 대한 포인터를 선언하는 각 변환 단위에서 발생해야 하며, 이 선언은 멤버에 대한 포인터가 선언되기 전에 발생해야 합니다.

이전 버전 _single_inheritance_multiple_inheritance_virtual_inheritance 과의 호환성을 위해 컴파일러 옵션 /Za (언어 확장 사용 안 함)을 지정하지 않는 한 , __multiple_inheritance__virtual_inheritance < a0/>의 동의어__single_inheritance입니다.

Microsoft 전용 종료

참고 항목

키워드