C++프로 그래 밍 에서 다단 계 파생 시의 구조 함수 와 접근 속성 을 자세히 설명 합 니 다.

4545 단어 C++파생
C++다 층 파생 시의 구조 함수
한 종 류 는 하나의 파생 류 를 파생 시 킬 수 있 을 뿐만 아니 라 파생 류 는 계속 파생 되 어 파생 의 차원 구 조 를 형성 할 수 있다.위 에서 서술 한 토대 에서 다단 계 파생 상황 에서 파생 류 의 구조 함 수 를 쓰 는 것 은 어렵 지 않다.
예 를 들 어 다음 절 차 를 통 해 독 자 는 다단 계 파생 상황 에서 파생 류 의 구조 함 수 를 어떻게 정의 하 는 지 알 수 있다.모두 가 스스로 이 프로그램 을 이해 할 수 있 을 것 이 라 고 믿는다.
[예]다단 계 파생 상황 에서 파생 류 의 구조 함수.

#include <iostream>
#include<string>
using namespace std;
class Student//    
{
public://    
  Student(int n, string nam)//      
  {
   num=n;
   name=nam;
  }
  void display( )//        
  {
   cout<<"num:"<<num<<endl;
   cout<<"name:"<<name<<endl;
  }
protected://    
  int num;//         
  string name;
};
class Student1: public Student//       Student1
{
public:
  Student1(int n,char nam[10],int a):Student(n,nam)//       
  {age=a;}//                  
  void show( ) //  num,name age
  {
   display( ); //  num name
   cout<<"age: "<<age<<endl;
  }
private://        
  int age; //        
};
class Student2:public Student1 //         Student2
{
public://            
  Student2(int n, string nam,int a,int s):Student1(n,nam,a) {score=s;}
  void show_all( ) //        
  {
   show( ); //  num name
   cout<<"score:"<<score<<endl; //  age
  }
private:
  int score; //        
};
int main( )
{
  Student2 stud(10010,"Li",17,89);
  stud.show_all( ); //         
  return 0;
}
실행 중인 출력 은 다음 과 같 습 니 다.

num:10010
name:Li
age:17
score:89
기본 클래스 와 두 파생 클래스 의 구조 함수 의 쓰기 에 주의 하 세 요.
기본 클래스 의 구조 함수 첫 번 째 부분:

  Student(int n, string nam)
파생 클래스 Student 1 의 구조 함수 첫 번 째 부분:

  Student1(int n, string nam],int a):Student(n,nam)
파생 클래스 Student 2 의 구조 함수 첫 번 째 부분:

  Student2(int n, string nam,int a,int s):Student1(n,nam,a)
쓰 지 않도록 주의 하 세 요:

  Student2(int n, string nam,int a,int s):Student1(n,nam),student1(n, nam, a)
모든 파생 류 의 구조 함 수 를 열거 하지 말고 이전 파생 류(즉,직접 기본 클래스)의 구조 함 수 를 쓰 면 됩 니 다.Student 2 클래스 대상 을 설명 할 때 Student 2 구조 함 수 를 호출 합 니 다.Student 2 구조 함 수 를 실행 할 때 먼저 Student 1 구조 함 수 를 호출 합 니 다.Student 1 구조 함 수 를 실행 할 때 기본 Student 구조 함 수 를 먼저 호출 합 니 다.초기 화 순 서 는:
기본 클래스 의 데이터 구성원 num 과 name 을 초기 화 합 니 다.
Student 1 데이터 멤버 age 를 초기 화 합 니 다.
마지막 으로 Student 2 의 데이터 멤버 score 를 초기 화 합 니 다.
C++클래스 다단 계 파생 시 접근 속성
실제 프로젝트 개발 에 서 는 다단 계 파생 이 자주 발생 한다.그림 11.9 에서 보 듯 이 파생 관계:클래스 A 는 기본 클래스 이 고 클래스 B 는 클래스 A 의 파생 클래스 이 며 클래스 C 는 클래스 B 의 파생 클래스 이 며 클래스 C 도 클래스 A 의 파생 클래스 이다.클래스 B 는 클래스 A 의 직접 파생 류,클래스 C 는 클래스 A 의 간접 파생 류 라 고 부른다.클래스 A 는 클래스 B 의 직접 기류 이 고 클래스 C 의 간접 기류 이다.

다단 계 파생 상황 에서 각 구성원 의 방문 속성 은 상기 원칙 에 따라 확정 된다.
다 중 상속 을 더욱 상세 하 게 말 하기 위해 서 는 아래 의 몇 가지 상속 유형 을 먼저 보 세 요.
[예]다음 과 같은 종 류 를 밝 히 면:

class A //  
{
public:
  int i;
protected:
  void f2( );
  int j;
private:
  int k;
};
class B: public A //public  
{
public:
  void f3( );
protected:
  void f4( );
private:
  int m;
};
class C: protected B //protected  
{
public:
  void f5( );
private:
  int n;
};
클래스 A 는 클래스 B 의 공용 기류 이 고 클래스 B 는 클래스 C 의 보호 기류 이다.각 구성원 이 같은 종류 에 접근 하 는 속성 은 다음 과 같 습 니 다.

이상 의 분석 에 따 르 면 파생 류 C 의 바깥 에 서 는 류 C 의 구성원 함수 f5 만 방문 할 수 있 고 다른 구성원 에 게 는 접근 할 수 없다.파생 클래스 C 의 구성원 함수 f5 는 기본 클래스 A 의 구성원 i,f2,j 와 파생 클래스 B 의 구성원 f3,f4 를 방문 할 수 있 습 니 다.파생 클래스 B 의 구성원 함수 f3,f4 는 기본 클래스 A 의 구성원 i,f2 와 j 를 방문 할 수 있 습 니 다.
상기 분석 을 통 해 알 수 있 듯 이 어떤 계승 방식 이 든 파생 류 에서 기본 적 인 개인 구성원 을 방문 할 수 없고 개인 구성원 은 본 유형의 구성원 함수 에 만 방문 할 수 있다.왜냐하면 파생 류 와 기본 류 는 같은 유형 이 아니 기 때문이다.
다단 계 파생 시 공용 상속 방식 을 채택 하면 마지막 파생 류 까지 기본 류 의 공용 구성원 과 보호 구성원 을 방문 할 수 있다.
만약 사유 상속 방식 을 채택 한다 면,몇 차례 의 파생 을 거 친 후,기류 의 모든 구성원 은 이미 방문 할 수 없 는 것 이 되 었 다.
보호 상속 방식 을 채택 하면 파생 류 외 에는 파생 류 의 어떤 구성원 도 방문 할 수 없다.
또 여러 차례 파생 된 뒤 에는 어떤 멤버 가 방문 할 수 있 는 지,어떤 멤버 가 방문 하지 못 하 는 지 정확히 기억 하기 어려워 실수 하기 쉽다.따라서 실제 적 으로 공용 상속 을 자주 사용한다.

좋은 웹페이지 즐겨찾기