컴파일러의 속성과 메소드 처리 메커니즘
C++의 클래스는 객체지향 이론에서 출발하여 변수(속성)와 함수(메서드)를 함께 정의하여 실제 세계를 기술합니다. 컴퓨터 관점에서 보면 프로그램은 여전히 데이터 세그먼트와 코드 세그먼트로 구성됩니다.
C++ 컴파일러는 객체지향 이론을 컴퓨터 프로그램으로 어떻게 변환합니까?
즉, C++ 컴파일러는 클래스, 객체, 클래스 및 객체 간의 관계를 어떻게 관리합니까?
구체적으로: 특정 객체가 클래스의 메서드를 호출하면 C++ 컴파일러가 어떻게 관리합니까? 어떤 클래스를 구별하려면 이 메소드를 호출하나요?
1) C++ 클래스 객체의 멤버 변수와 멤버 함수는 별도로 저장됩니다.
멤버 변수:
일반 멤버 변수: 저장됩니다. 구조체 변수와 동일한 메모리 레이아웃 및 바이트 정렬을 사용하여 개체에서
정적 멤버 변수: 전역 데이터 영역에 저장
멤버 함수: 코드 조각에 저장됩니다.
질문이 생깁니다. 많은 개체가 코드 조각을 공유합니까? 코드는 특정 객체를 어떻게 구별합니까?
즉, int getK() const { return k }, 코드는 obj1, obj2 및 obj3 객체의 특정 k 값을 어떻게 구별합니까?
왼쪽은 C++ 클래스의 구현이고 오른쪽은 해당 기본 구현입니다.
요약:
1. C++ 클래스 객체의 멤버 변수와 멤버 함수는 별도로 저장됩니다. C 언어의 4개 영역 메모리 모델은 여전히 작동합니다!
2. C++ 클래스의 일반 멤버 함수에는 현재 개체를 가리키는 this 포인터가 암시적으로 포함되어 있습니다.
3. 정적 멤버 함수와 멤버 변수는 클래스에 속합니다
정적 멤버 함수와 일반 멤버 함수의 차이점
정적 멤버 함수는 특정 객체에 대한 포인터를 포함하지 않습니다
일반 멤버 함수에는 특정 개체에 대한 포인터가 포함되어 있습니다
확장:
생각: 클래스의 멤버 함수는 const로 수정될 수 있습니다. const는 누구를 수정하나요?
void const get(int a,intb)//类的成员函数 { this->a=100;//错误 this->b=200;//错误 }
위 분석에 따르면 내부 구현은
void get (const Test *This,int a,int b)
이므로 const는 이 포인터가 가리키는 메모리 공간을 수정합니다.
위는 C++ 리뷰 포인트 여섯 번째 요약입니다. 컴파일러의 속성 및 메소드 처리 메커니즘에 대한 자세한 내용은 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요!