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 members
과function members
을 가리킨다.간단 한 대상 모델 을 Point Class 에 적용 하면 구조 도 는 다음 과 같 습 니 다.
장점:매우 간단 하여 컴 파일 러 디자인 의 복잡 도 를 낮 추 었 다.
단점:공간 과 시간의 효율 이 떨어진다.모든
member
은 하나의slot
지침 에 대응 하기 때문에 각object
은 공간 에 지침 크기 를 곱 한 공간 이 추가 로 많다.또한 방문member's number
의 각각object
에 한 번member
의 추가 색인 이 필요 하기 때문에 시간 효율 도 떨어진다.2.표 구동 개체 모델
표 구동 대상 모델 은
slot
과member data
을 각각 두 개의 표member function
와member data table
로 비 추 었 고function member table
자 체 는 이 두 표를 가리 키 는 지침 만 저장 했다.그 중에서object
은 일련의 slot 로 구성 되 고 각각function member table
은 하나slot
를 가리킨다.member function
는 직접 저 장 된member data table
자체 이다.표 구동 대상 모델 을member data
에 적용 하면 구조 도 는 다음 과 같다.장점:2 층 색인 체 제 를 사용 하여
Point Class
변화 에 비교적 좋 은 탄력성 을 제공 합 니 다.object
의object
이 바 뀌 었 을 때 응용 프로그램 코드 는 바 뀌 지 않 았 습 니 다.이 때 는 다시 컴 파일 할 필요 가 없습니다.단점:공간 과 시간의 효율 이 떨 어 지고 구체 적 인 원인 은 간단 한 대상 모델 의 단점 분석 을 참고 할 수 있다.
3.C++개체 모델
nonstatic data member
초기 에 디자인 된 C+대상 모델 은 간단 한 대상 모델 에서 개선 되 었 고 메모리 공간 과 액세스 시간 을 최적화 시 켰 다.주로Stroustrup
을 각각nonstatic data members
에 저장 하고object
와 모든static data members
은 모든function members
에 독립 적 으로 저장 된다.가상 함수 에 대한 지원 은 주로 다음 과 같은 몇 가 지 를 통 해 이 루어 집 니 다.
가상 함 수 를 포함 하거나 자체 가상 함수 기 류 를 계승 하 는 모든
object
은 하나의class
가 있 습 니 다.이 가상 함수 표 는 이러한 종류의 가상 함 수 를 가리 키 는 지침 을 저장 하고 있 습 니 다.각
virtual table
과 연 결 된class
도type_info object
에 저장 되 어 있 으 며,일반적으로 이 표 의 첫 번 째virtual table
가 존재 하 며,slot
는 지원type_info
(RTTI)에 사용 된다.C++대상 모델 을 Point Class 에 적용 하면 구조 도 는 다음 과 같 습 니 다.
장점:공간 과 액세스 효율 이 높 고 모든
runtime type identification
과 모든static data members
이 모든 object 에 독립 적 으로 저장 되 어 있 으 며,각각function members
의 크기 를 줄 일 수 있 으 며,object
은 각각nonstatic data members
에 저장 되 어 액세스 효율 을 높 일 수 있다.단점:만약 에 응용 프로그램의 코드 가 변경 되 지 않 았 지만 사용 하 는
object
class
이 변경 되 었 다 면 그 코드 들 은 모두 재 컴 파일 해 야 한다.앞의 표 구동 모델 은 이 방면 에서 비교적 큰 탄력 을 제공 했다.왜냐하면 그 는 간접 성 을 많이 제 공 했 기 때문에 당연히 시간 과 공간의 대 가 를 치 렀 기 때문이다.상속 상황 에서 의 대상 모델 을 더 하 다.
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++의 대상 모델 의 모든 내용 을 깊이 연구 하 는 것 이 므 로 본 고의 내용 이 여러분 에 게 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.