C++파생 류 의 보호 구성원 계승 을 깊이 분석 하 다.

6405 단어 C++이어받다
proctected 는 Public 와 private 와 마찬가지 로 구성원 의 접근 권한 을 설명 하 는 데 사 용 됩 니 다.proctected 가 성명 한 구성원 을'보 호 받 는 구성원'또는'보호 구성원'이 라 고 부른다.이러한 사용자 의 측면 에서 볼 때 구성원 을 보호 하 는 것 은 개인 구성원 과 같다.그러나 한 가 지 는 개인 구성원 과 달리 구성원 을 보호 하 는 것 은 파생 류 의 구성원 함수 에 의 해 인 용 될 수 있다.
기본 클래스 가 개인 구성원 을 성명 한다 면 그 어떠한 파생 클래스 도 그들 을 방문 할 수 없다.파생 클래스 에서 그들 을 방문 할 수 있 기 를 원한 다 면 그들 을 보호 구성원 으로 성명 해 야 한다.한 클래스 에서 구성원 을 보호 하 겠 다 고 밝 히 면 이 클래스 가 기본 클래스 로 사 용 될 수 있 고 파생 클래스 에서 이 멤버 들 을 방문 할 수 있다 는 뜻 이다.
하나의 파생 클래스 를 정의 할 때 기본 클래스 의 계승 방식 을 proctected 로 지정 하 는 것 을 보호 계승 이 라 고 하고 보호 계승 방식 으로 만 든 파생 류 를 보호 파생 류(proctected derived class)라 고 하 며 그 기본 클래스 는 보 호 받 는 기본 클래스(proctected base class)라 고 하 며 보호 기본 클래스 라 고 한다.
계승 을 보호 하 는 특징 은 기본 적 인 공공 구성원 과 보호 구성원 이 파생 류 에서 모두 보호 구성원 이 되 었 고 그의 개인 구성원 은 아직도 기본 적 인 사유 이다.기 존 공용 멤버 들 도 보호 하고 외부 에 임의로 접근 하지 못 하 게 하 는 것 이다.

기본 클래스 를 보호 하 는 모든 구성원 은 파생 클래스 에서 보호 되 고 클래스 외 에 접근 할 수 없 으 며 공용 구성원 과 보호 구성원 은 파생 클래스 의 구성원 함수 에 접근 할 수 있 습 니 다.
기본 클래스 를 보호 하 는 모든 구성원 은 파생 클래스 에서 보호 되 고 클래스 외 에 접근 할 수 없 으 며 공용 구성원 과 보호 구성원 은 파생 클래스 의 구성원 함수 에 접근 할 수 있 습 니 다.
사유 상속 과 보호 상속(즉,사유 파생 류 와 보호 파생 류 에서 의 방문 속성 비교)을 비교 해 보면 직접 파생 류 에서 상기 두 가지 계승 방식 의 역할 은 실제 적 으로 같다.유형 외 에 그 어떠한 구성원 도 방문 할 수 없고 파생 류 에서 구성원 함 수 를 통 해 기본 류 중의 공공 구성원 과 보호 구성원 을 방문 할 수 있다.그러나 계속 파생 된다 면 새로운 파생 류 에 서 는 두 가지 계승 방식 의 역할 이 다르다.
예 를 들 어 공용 계승 방식 으로 새로운 파 생 류 를 파생 시 키 면 원래 사유 기류 중의 구성원 은 신 파 생 류 에서 모두 방문 할 수 없 는 구성원 이 되 고 파생 류 내 또는 외부 에서 방문 할 수 없 으 며 원래 보호 기류 중의 공용 구성원 과 보호 구성원 은 신 파 생 류 에서 구성원 을 보호 하기 위해 신 파 생 류 의 구성원 함수 에 방문 할 수 있다.
기본 적 인 사유 구성원 은 파생 류 에 의 해 계승(사유 상속,공유 상속 이 든 보호 상속 이 든)된 후에 방문 할 수 없 는 구성원 으로 변 하고 파생 류 중의 모든 구성원 은 그들 을 방문 할 수 없다 는 것 을 기억 해 야 한다.파생 클래스 에서 기본 클래스 의 일부 구성원 을 인용 해 야 한다 면 기본 클래스 의 구성원 들 을 proctected 로 성명 해 야 하 며,private 로 성명 하지 말 아야 합 니 다.
만약 에 구성원 보 호 를 잘 이용한다 면 클래스 의 차원 구조 에서 데이터 공유 와 구성원 은폐 간 의 결합 점 을 찾 을 수 있다.일부 구성원 의 은밀 함 을 실현 할 수 있 을 뿐만 아니 라 편리 하 게 계승 할 수 있 으 며 코드 재 활용 과 확장 을 실현 할 수 있다.
이상 의 소 개 를 통 해 다음 과 같은 몇 가 지 를 알 수 있다.
1)파생 클래스 에서 구성원 은 4 가지 서로 다른 방문 속성 이 있 습 니 다.
공용 으로 파생 류 내 와 파생 류 외 에 모두 방문 할 수 있다.
보 호 받 는 사람 은 파생 류 내 에서 방문 할 수 있 고 파생 류 외 에는 방문 할 수 없 으 며 그 다음 층 의 파생 류 는 방문 할 수 있다.
개인 적 인 것 은 파생 류 내 에서 방문 할 수 있 고 파생 류 외 에는 방문 할 수 없다.
방문 할 수 없 는 것 은 파생 류 내 와 파생 류 외 에는 방문 할 수 없다.

설명 이 필요 한 것 은:
여기 열 거 된 구성원 의 접근 속성 은 파생 클래스 에서 얻 은 접근 속성 을 말 합 니 다.
파생 류 외부 란 파생 류 대상 을 만 드 는 모듈 에서 파생 류 범위 밖 을 말한다.
만약 에 본 파생 류 가 계속 파생 된다 면 서로 다른 계승 방식 에서 구성원 이 얻 은 방문 속성 이 다 릅 니 다.본 표 에서 다음 층 의 공공 파생 류 에 만 열거 되 어 있 는 상황 입 니 다.만약 에 사유 상속 이나 보호 상속 이 라면 표 11.3 에서 답 을 찾 을 수 있 습 니 다.
2)클래스 의 구성원 은 서로 다른 역할 영역 에서 서로 다른 방문 속성 을 가지 고 있다 는 점 을 잘 알 아야 한다.한 구성원 의 방문 속성 은 전제 가 있 습 니 다.어떤 역할 영역 에 있 는 지 봐 야 합 니 다.어떤 독자 들 은"하나의 기본 적 인 공공 구성원 이 파생 류 에서 보호 로 바 뀌 었 는데 도대체 그 자체 가 공공 적 인 것 입 니까?아니면 보호 적 인 것 입 니까?"라 고 물 었 다.같은 구성원 이 서로 다른 역할 영역 에서 보 여 주 는 서로 다른 특징 이 라 고 해 야 한다.예 를 들 어 학교 인사 부 서 는 전교 교사 와 학생 직원 의 자 료 를 파악 했다.학교의 지도 자 는 누구의 자 료 를 찾 아 볼 수 있 고 학교 산하 학 과 는 전교 의 자료 에서 본 학과 의 교사 와 학생 직원 의 자 료 를 얻 을 수 있 을 뿐 다른 부서 의 누구의 자 료 를 찾 아 볼 수 없다.장 씨 의 자 료 를 찾 아 볼 수 있 느 냐 고 물 으 려 면 일률적으로 말 할 수 없다.신분 을 밝 혀 야 그 사람의 자료 가'방문'될 수 있 는 지 를 결정 할 수 있다.
파생 류 를 소개 하지 않 기 전에 류 의 구성원 은 그 소속 류 에 만 속 하고 다른 류 와 관련 되 지 않 으 며 나 쁜 의 미 를 일 으 키 지 않 는 다.파생 류 를 소개 한 후에 한 가지 문제 가 존재 한다.어느 범위 에서 구성원 의 특징 을 토론 하고 같은 구성원 이 서로 다른 계승 차원 에서 서로 다른 특징 을 가진다.이 개념 을 설명 하기 위해 예 를 들 어 자동차 운전면허증 은 지역 에 따라 심사 하여 발급 한 것 으로 베 이 징 의 운전면허증 은 베 이 징 시 범위 내 에서 막힘 이 없 으 며 만약 외지 에 가면 어떤 제한 을 받 아 외국 에 가면 무효 가 될 수 있다.같은 운전 자의 지역 별 권 리 는 다르다.예 를 들 어 병원 에 가서 환 자 를 면회 하고 병실 에 들 어가 환 자 를 가까이 서 방문 하고 이 야 기 를 나 누 는 것 을 허락 하면 환자 에 대해 비교적 깊 은 사람 을 알 수 있다.만약 당신 이 유리 문 창밖 에서 만 면회 할 수 있다 면,일정한 거리 밖에서 환 자 를 볼 수 있 고,환자 의 상태 에 대해 대략적인 인상 을 가 질 수 밖 에 없다.병구 복도 에서 텔레비전 을 통 해 환자 가 활동 하 는 장면 만 허용 된다 면 더욱 간접 적 이다.사람들 은 서로 다른 상황 에서 같은 환자 에 대해 서로 다른 정 보 를 얻 거나 이 환 자 는 서로 다른 상황 에서'가시 성'이 다르다.
평소에 사람들 은 어떤 유형의 공공 구성원 이 어떻게 되 는 지 에 대해 습관 적 으로 말 하 는데 이것 은 일반적으로 오 해 를 일 으 키 지 않 는 상황 에서 가능 하 다.그러나 이 멤버 의 방문 속성 은 공용 일 뿐 바 꿀 수 없다 고 오해 해 서 는 안 된다.구성원 의 방문 속성 을 토론 할 때 어떤 범위 에서 말 하 는 지 설명해 야 한다.예 를 들 어 기본 클래스 의 구성원 a 는 기본 클래스 에서 의 방문 속성 이 공용 이 고 개인 파생 클래스 에서 의 방문 속성 은 사유 이다.
다음은 보호 멤버 를 어떻게 방문 하 는 지 예 를 들 어 설명 한다.
[예]파생 류 에서 보호 멤버 를 인용 하 다.

#include <iostream>
#include <string>
using namespace std;
class Student//    
{
public:
  //      
  void display( );
protected:
  //      
  int num;
  string name;
  char sex;
};
//        
void Student::display( )
{
  cout<<"num: "<<num<<endl;
  cout<<"name: "<<name<<endl;
  cout<<"sex: "<<sex<<endl;
}
class Student1: protected
Student // protected       Student1
{
public:
  void display1( );//         
private:
  int age;//         
  string addr;//         
};
void Student1::display1( )//           
{
  cout<<"num: "<<num<<endl;//         ,  
  cout<<"name: "<<name<<endl;//         ,  
  cout<<"sex: "<<sex<<endl;//         ,  
  cout<<"age: "<<age<<endl;//          ,  
  cout<<"address: "<<addr<<endl; //          ,  
}
int main( )
{
  Student1 stud1; //stud1    Student1    
  stud1.display1( ); //  ,display1            
  stud1.num=10023; //  ,          
  return 0;
}
파생 류 의 구성원 함수 에서 기본 류 의 보호 구성원 을 인용 하 는 것 은 합 법 적 이다.기본 적 인 보호 구성원 은 파생 류 의 외부 에 접근 할 수 없다(예 를 들 어 num 은 기본 적 인 Student 중의 보호 구성원 이다.파생 류 는 보호 계승 이기 때문에 파생 류 에서 여전히 보 호 를 받 고 외부 에 서 는 stud1.num 으로 인용 할 수 없다).그러나 파생 류 에 서 는 개인 구성원 에 해당 하 며 파생 류 의 구성원 함수 로 방문 할 수 있다.구성원 을 보호 하 는 것 과 개인 구성원 을 보호 하 는 것 이 다른 점 은 구성원 을 보호 하 는 방문 범 위 를 파생 류 로 확대 하 는 데 있다.
메모:프로그램 에서 파생 클래스 Student 1 의 대상 stud 1 의 공용 멤버 함수 display 1 을 통 해 기본 클래스 의 보호 멤버 num,name,sex 를 방문 합 니 다.파생 클래스 대상 이름 을 통 해 기본 클래스 의 보호 멤버(예 를 들 어 stud1.num 이 잘못 되 었 다 고 오해 하지 마 십시오).
사유 상속 과 보호 상속 방식 은 사용 할 때 매우 조심해 야 하고 잘못 되 기 쉬 우 며 일반적으로 자주 사용 하지 않 는 다.본 튜 토리 얼 뒤의 예 는 주로 공공 상속 방식 을 소개 한다.

좋은 웹페이지 즐겨찾기