이전 섹션에서는 공개 상속을 사용하여 파생 클래스를 정의하는 방법을 살펴보았습니다. 여기에는 실제로 공개 상속 , 비공개 상속 , 보호 상속 이라는 세 가지 방법이 있습니다 .
다양한 상속 방법 간의 주요 차이점은 파생 클래스의 기본 클래스에서 서로 다른 액세스 권한을 가진 멤버의 액세스 권한이 변경된다는 점입니다. 아래에 하나씩 소개합니다.
1. 공개 상속:
공개 상속 모드의 특징은 다음과 같습니다.
(1) 기본 클래스의 공용 멤버는 파생 클래스의 공용 멤버입니다. 물론 파생 클래스의 멤버 함수와 파생 클래스 개체 모두에 액세스할 수 있습니다.
(2) 기본 클래스의 전용 멤버는 파생 클래스의 멤버나 파생 클래스의 개체에서 액세스할 수 없습니다.
(3) 기본 클래스의 보호 멤버는 파생 클래스에서도 여전히 보호 유형이며 파생 클래스의 멤버 함수를 통해 액세스할 수 있지만 파생 클래스 개체에는 액세스할 수 없습니다.
2. 개인 상속:
Private 상속의 경우 Public 유형, Private 유형, Protected 유형 세 멤버의 액세스 권한은 다음과 같습니다.
(1) 기본 클래스의 공개 및 보호 유형은 파생 클래스의 비공개 상속에 의해 흡수된 후 파생 클래스의 비공개 유형이 됩니다. 즉, 클래스의 멤버 함수에서 액세스할 수 있지만 클래스 외부에서 접근 가능
(2) 기본 클래스의 전용 멤버는 클래스 내부든 외부든 파생 클래스에서 액세스할 수 없습니다.
프라이빗 파생인 경우 기본 클래스의 프라이빗 멤버는 파생 클래스나 심지어 파생 하위 클래스에서도 더 이상 사용할 수 없으며 의미도 없으므로 이러한 종류의 사용은 상대적으로 드뭅니다.
3. 상속 보호:
보호 유형 상속에는 다음과 같은 특징이 있습니다.
(1) 기본 클래스의 공용 멤버와 보호 유형 멤버는 파생 클래스의 보호 멤버입니다.
(2) 기본 클래스의 전용 멤버는 파생 클래스에서 직접 액세스할 수 없습니다.
파생 클래스의 멤버 함수는 기본 클래스의 public 멤버와 protected 멤버에 접근할 수 있지만 파생 클래스 객체를 통해 클래스 외부에서는 접근할 수 없음을 알 수 있다. 마찬가지로 기본 클래스의 전용 멤버는 파생 클래스의 멤버 함수나 클래스 개체를 통해 액세스할 수 없습니다.
다음은 기본 클래스의 다양한 권한에서 파생된 다양한 유형의 액세스 문제를 실험하기 위한 예로 시계 및 알람 시계의 프로그램 코드를 사용합니다. 공용 형식의 경우 파생 클래스의 멤버 메서드나 클래스 외부에서 호출할 수 있습니다. 컴파일은 다음과 같이 오류 없이 실행됩니다.
하지만 비공개 멤버의 경우 41행을 참조하여 코드 줄을 추가하려고 합니다. 파생 클래스의 멤버 함수에는 기본 클래스에서 흡수된 H 변수가 할당되고 컴파일 중에 오류가 보고됩니다. 아래 빨간색 상자와 프롬프트를 참조하세요.
"H는 개인 유형입니다"라는 오류 메시지를 볼 수 있습니다.
보호 유형의 경우 기본 클래스에 보호 유형 변수 w를 정의하고 공개적으로 상속된 파생 클래스 메서드에서 이를 할당하고 사용하려고 시도합니다. 아래 그림에서 완전히 액세스할 수 있는 상황을 볼 수 있습니다. 아래와 같이:
비공개 상속의 경우 공개 유형의 멤버는 클래스 외부에서 액세스됩니다.
공개 상속에 따라 다양한 유형의 멤버 액세스를 직접 실험해 볼 수 있습니다.
연구하고 실험한 결과 다음과 같이 요약할 수 있습니다.
1. 기본 클래스의 전용 멤버는 파생 권한에 관계없이 파생 클래스 내부 또는 클래스 외부의 멤버 함수로 액세스할 수 없습니다.
2. 비공개 상속은 기본 클래스의 원래 유형이 무엇이든 파생 클래스 외부의 멤버 함수를 통해 액세스할 수 없습니다.
3. 기본 클래스에서 파생 클래스가 흡수한 멤버의 접근 권한은 파생 당시의 파생 권한과 기본 클래스의 접근 권한 중 가장 낮은 수준입니다.
그리고 파생된 권한, 기본 클래스에 정의된 권한, 파생 클래스 내부 및 클래스 외부의 다양한 액세스 시간의 조합을 기반으로 다음 표가 나열됩니다.
공개 상속 | 보호된 상속 | 개인 상속 | ||||
방문 위치 | 수업 중 | 수업 외 | 수업 중 | 수업 외 | 수업 중 | 수업 외 |
공개 회원 | 할 수 있다 | 할 수 있다 | 할 수 있다 | 캔트 | 할 수 있다 | 캔트 |
회원을 보호하다 | 할 수 있다 | 캔트 | 할 수 있다 | 캔트 | 할 수 있다 | 캔트 |
개인 회원 | 캔트 | 캔트 | 캔트 | 캔트 | 캔트 | 캔트 |