이 포인터
클래스에는 this 포인터 라는 매우 숨겨진 특수 포인터가 있습니다!
왜 특별한가요? 클래스가 정의되어 있는 한 시스템은 this라는 이름의 포인터를 미리 정의하고 현재 객체를 가리키기 때문입니다. 우리는 그것을 볼 수는 없지만 사용할 수는 있습니다.
예를 들어, 시간 값을 설정하는 데 사용되는 코드인 시계 클래스의 멤버 함수를 살펴보겠습니다.
intClock::SetTime(inth,intm,ints){H=h;M=m;S=s;}Clock 클래스 자체의 멤버 변수는 H, M, S임을 알 수 있다. 이들을 구별하기 위해 형식 매개변수를 소문자로 정의한다. 따라서 이것이 존재한다는 것을 안다면 다음과 같이 쓸 수 있습니다.
intClock::SetTime(inth,intm,ints){this->H=h;this->M=m;this->S=s;}//다음과 같이 쓸 수도 있습니다: intClock::SetTime(inth, intm,ints ){(*this).H=h;(*this).M=m;(*this).S=s;}위의 두 가지 작성 방법은 객체에 숨겨진 this 포인터를 사용한다는 것을 알 수 있습니다. 이 포인터는 분명히 이 클래스의 멤버일 수 있으므로 이 객체를 외부 변수와 명확하게 구별합니다. 실제로 객체가 자신의 멤버 함수를 호출할 때 프로그램에 이 클래스의 여러 객체가 있더라도 멤버 함수에 대한 코드는 하나만 있으므로 어떤 객체가 멤버 함수를 호출하는지 구별하기 위해 컴파일러도 마찬가지입니다. Converts this->member 함수 형태로 사용됩니다.