Loading…

c++ 클래스 포인터 예제

포인터 또는 포인터-멤버 형식의 변수를 선언합니다. 포인터 선언은 선언자가 함수 호출 연산자의 왼쪽 발환으로 사용할 수있는 forma 포인터가있는 간단한 선언입니다.이 함수는 pointed-to 함수를 호출합니다: 일반적으로 하나의 다중 수준에서 암시적 변환 다른 포인터는 자격 변환 및 포인터 비교 연산자에서 설명하는 규칙을 따릅니다. `this` 포인터를 이해하려면 개체가 클래스의 함수 및 데이터 멤버를 보는 방법을 아는 것이 중요합니다. 1. 각 개체는 데이터 멤버의 자체 복사본을 가져옵니다. 2. 모두 코드 세그먼트에 있는 것과 동일한 함수 정의에 액세스합니다. 각 개체는 데이터 멤버의 고유한 복사본을 얻고 모든 개체는 멤버 함수의 단일 복사본을 공유합니다. 그렇다면 이제 질문은 각 멤버 함수의 복사본이 하나만 존재하고 여러 개체에서 사용되는 경우 적절한 데이터 멤버에 액세스하고 업데이트하는 방법은 무엇입니까? 컴파일러는 함수 이름과 함께 암시적 포인터를 `this`로 제공합니다.

`this` 포인터는 모든 비정적 멤버 함수 호출에 숨겨진 인수로 전달되며 모든 비정적 함수의 본문 내에서 로컬 변수로 사용할 수 있습니다. `this` 포인터는 현재 개체의 메모리 주소를 보유 하는 상수 포인터입니다. 정적 멤버 함수는 클래스 이름 없이 호출할 수 있기 때문에 정적 멤버 함수에서는 `this` 포인터를 사용할 수 없습니다. 클래스 X의 경우 이 포인터의 유형은 `X* const`입니다. 또한 X의 멤버 함수가 const로 선언된 경우 이 포인터의 형식은 `const X *const`(이 GFact 참조) 개체를 가리키는 포인터는 개체가 차지하는 메모리의 첫 번째 바이트의 주소를 나타냅니다. 개체의 끝을 지나가는 포인터는 개체가 차지하는 저장소가 끝난 후 메모리에서 첫 번째 바이트의 주소를 나타냅니다. Derived가 다형성인 경우 이러한 포인터를 사용하여 가상 함수 호출을 할 수 있습니다. 0 및 값 초기화는 또한 null 값에 대한 포인터를 초기화합니다. 함수에 대한 포인터는 비멤버 함수 또는 정적 멤버 함수의 주소로 초기화할 수 있습니다. 함수-대 포인터 암시적 변환으로 인해 연산자의 주소는 선택 사항입니다: 포인터 형식의 모든 값은 다음 중 하나입니다: 모든 형식의 포인터는 해당 형식의 null 포인터 값으로 알려진 특수 값을 갖습니다. 값이 null인 포인터는 개체 또는 함수를 가리키지 않으며(null 포인터를 다시 참조하는 것은 정의되지 않은 동작입니다)이며 값이 null인 동일한 형식의 모든 포인터와 동일하게 비교합니다. 위의 다이어그램에서 볼 수 있듯이 클래스 사각형의 var라는 개체 배열을 만들었습니다.

ptr이라는 클래스 직사각형 포인터가 있으며 이 포인터 ptr에 개체 배열의 기본 주소를 할당했습니다. 이제 포인터 ptr이 개체 배열의 첫 번째 요소를 가리킵니다. 이제 c++에서 증분 연산자 (ptr++)를 사용하여 객체 배열을 반복 할 수 있습니다 : ptr ++ 이것은 포인터가 개체 배열의 다음 배열 요소를 가리키게하고 해당 요소의 데이터 멤버 및 멤버 함수에 액세스 할 수 있습니다. 우리가 보고 예제: null 또는 기존 포인터에 null 값을 할당 하는 포인터를 초기화 하려면 null 포인터 리터럴 nullptr, null 포인터 상수 NULL 또는 정수 값 0에서 암시적 변환을 사용할 수 있습니다. 그럼에도 불구하고 동일한 주소를 나타내는 두 포인터는 서로 다른 값을 가질 수 있습니다. 클래스에 대한 포인터를 방금 보았듯이 포인터는 클래스 배열을 가리킬 수도 있습니다.