상속 키워드
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 전용 종료
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기