C++의 대상 모델 을 깊이 이해 하 다.

5215 단어 c개체 모델
C++대상 모델 은 무엇 입 니까?
C++대상 모델 은 다음 과 같은 두 부분 으로 요약 할 수 있다.
     1.언어 에서 대상 프로 그래 밍 을 직접 지원 하 는 부분
     2.각종 지원 에 대한 밑바닥 실현 메커니즘
머리말
현재 Point 클래스 가 있 습 니 다.성명 은 다음 과 같 습 니 다.

class Point {
 public:
 Point(float xval);
 virtual ~Point();

 float x() const;
 static int PointCount();

 protected:
 virtual ostream& print(ostream &os) const;

 float _x;
 static int _point_count;
};
이런 종 류 는 기계 상에 서 어떤 모형 을 통 해 표 시 됩 니까?다음은 세 가지 서로 다른 실현 방식 을 소개 한다.
1.단순 개체 모델
간단 한 대상 모델 은 명실상부 하고 매우 간단 하 다.단순 대상 모델 중 하나object는 일련의slots로 구성 되 어 있 으 며,각각slot은 하나의 지침 에 해당 하 며,하나member를 가리 키 고,memebers는 성명 의 순서에 따라slots와 일일이 대응 하 며,여기members가방 data membersfunction members을 가리킨다.
간단 한 대상 모델 을 Point Class 에 적용 하면 구조 도 는 다음 과 같 습 니 다.

장점:매우 간단 하여 컴 파일 러 디자인 의 복잡 도 를 낮 추 었 다.
단점:공간 과 시간의 효율 이 떨어진다.모든member은 하나의slot지침 에 대응 하기 때문에 각object은 공간 에 지침 크기 를 곱 한 공간 이 추가 로 많다.또한 방문member's number 의 각각object에 한 번member의 추가 색인 이 필요 하기 때문에 시간 효율 도 떨어진다.
2.표 구동 개체 모델
표 구동 대상 모델 은slotmember data을 각각 두 개의 표member functionmember data table로 비 추 었 고function member table자 체 는 이 두 표를 가리 키 는 지침 만 저장 했다.그 중에서object은 일련의 slot 로 구성 되 고 각각function member table은 하나slot를 가리킨다.member function는 직접 저 장 된member data table자체 이다.표 구동 대상 모델 을member data에 적용 하면 구조 도 는 다음 과 같다.

장점:2 층 색인 체 제 를 사용 하여Point Class변화 에 비교적 좋 은 탄력성 을 제공 합 니 다.objectobject이 바 뀌 었 을 때 응용 프로그램 코드 는 바 뀌 지 않 았 습 니 다.이 때 는 다시 컴 파일 할 필요 가 없습니다.
단점:공간 과 시간의 효율 이 떨 어 지고 구체 적 인 원인 은 간단 한 대상 모델 의 단점 분석 을 참고 할 수 있다.
3.C++개체 모델nonstatic data member초기 에 디자인 된 C+대상 모델 은 간단 한 대상 모델 에서 개선 되 었 고 메모리 공간 과 액세스 시간 을 최적화 시 켰 다.주로Stroustrup 을 각각nonstatic data members에 저장 하고object와 모든static data members은 모든function members에 독립 적 으로 저장 된다.
가상 함수 에 대한 지원 은 주로 다음 과 같은 몇 가 지 를 통 해 이 루어 집 니 다.
     가상 함 수 를 포함 하거나 자체 가상 함수 기 류 를 계승 하 는 모든object은 하나의class가 있 습 니 다.이 가상 함수 표 는 이러한 종류의 가상 함 수 를 가리 키 는 지침 을 저장 하고 있 습 니 다.
     각virtual table과 연 결 된classtype_info object에 저장 되 어 있 으 며,일반적으로 이 표 의 첫 번 째virtual table가 존재 하 며,slot는 지원type_info(RTTI)에 사용 된다.
C++대상 모델 을 Point Class 에 적용 하면 구조 도 는 다음 과 같 습 니 다.

장점:공간 과 액세스 효율 이 높 고 모든runtime type identification과 모든static data members이 모든 object 에 독립 적 으로 저장 되 어 있 으 며,각각function members의 크기 를 줄 일 수 있 으 며,object은 각각nonstatic data members에 저장 되 어 액세스 효율 을 높 일 수 있다.
단점:만약 에 응용 프로그램의 코드 가 변경 되 지 않 았 지만 사용 하 는objectclass이 변경 되 었 다 면 그 코드 들 은 모두 재 컴 파일 해 야 한다.앞의 표 구동 모델 은 이 방면 에서 비교적 큰 탄력 을 제공 했다.왜냐하면 그 는 간접 성 을 많이 제 공 했 기 때문에 당연히 시간 과 공간의 대 가 를 치 렀 기 때문이다.
상속 상황 에서 의 대상 모델 을 더 하 다.
C++는 단일 계승,다 중 계승,가상 계승 을 지원 합 니 다.다음은nonstatic data members실체 가base class에서 어떻게 구축 되 었 는 지 살 펴 보 겠 습 니 다.
단순 대상 모델 에 서 는derived class중 하나derived class object를 통 해slot의 주 소 를 저장 할 수 있 으 며,이base class subobject를 통 해slot의 구성원 을 방문 할 수 있다.이러한 실현 방식 의 주요 단점 은 간접 적 인 저장 으로 인해 공간 과 액세스 시간 에 추가 적 인 부담 이 존재 한 다 는 것 이다.장점 은base class의 구조 가derived class의 변화 로 인해 바 뀌 지 않 는 다 는 것 이다.
표 구동 대상 모델 에 서 는 유사 한base class표를 이용 하여 모든 기본 클래스 의 정 보 를 저장 할 수 있다.이 표 에는 일련의base class table이 저장 되 어 있 으 며,각각slot은 하나의slot주 소 를 저장 하고 있다.이러한 실현 방식 의 단점 은 간접 적 인 저장 으로 인해 공간 과 액세스 시간 에 추가 적 인 부담 이 존재 한 다 는 것 이다.장점 은 첫째,모든 계승base class이 일치 하 는 표현 형식(하나의class지침 을 포함 하고 기본 표 를 가리 키 는 것)은 기본 류 의 크기 와 수량 과 관계 가 없다 는 것 이다.둘째,base table는 하위 류 의 확장 성 을 증가 시 켰 고 기본 류 가 바 뀌 었 을 때 확장,축소 또는 변경base class table을 통 해 조정 할 수 있다.
상기 두 가지 실현 방식 에 모두 중요 한 문제 가 존재 하 는데 그것 이 바로 간접 성 으로 인해 발생 하 는 공간 과 시간 상의 추가 부담 이 고 이 간접 적 인 급 수 는 계승 의 깊이 에 따라 증가한다.
C++최초 로 사용 한 계승 모델 은 그 어떠한 간접 성 을 사용 하지 않 고 모든 기본 적 인 데 이 터 는 하위 클래스 에 직접 저장 되 어 저장 구조 와 방문 효율 에 있어 가장 효율 적 이다.물론 단점 도 있다.base class table어떤 변화 가 있 으 면 이base class members또는base class의 대상 을 다시 번역 해 야 한다.C++2.0 에derived class도입 되 었 습 니 다.이 기능 을 지원 하 는 간접 적 인 방식 이 필요 합 니 다.보통virtual base class을 가 져 오 거나 기 존virtual base class table을 확장 합 니 다.
총결산
이상 은 C++의 대상 모델 의 모든 내용 을 깊이 연구 하 는 것 이 므 로 본 고의 내용 이 여러분 에 게 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기